Add classes
This commit is contained in:
parent
b637aeefe9
commit
30bb518f7b
5 changed files with 194 additions and 4 deletions
54
README.md
54
README.md
|
@ -99,6 +99,24 @@ WARNING: Use with caution. I am yet to find a host/school that provides this dat
|
|||
|
||||
**_error**: < error > Holds standard error data if errors were encountered.
|
||||
|
||||
## GetClasses(school, checkAvailability) (_result, _error)
|
||||
|
||||
Retrieves all classes in a school.
|
||||
|
||||
A class is a group of people, typically taking one or more courses together.
|
||||
|
||||
### Parameters
|
||||
|
||||
**school**: < [School](#school) > School to get students from.
|
||||
|
||||
**checkAvailability**: < bool > If stored availability data should be used to skip requests for unavailable data.
|
||||
|
||||
### Returns
|
||||
|
||||
**_result**: < [] [Class](#class) > Array of available classes.
|
||||
|
||||
**_error**: < error > Holds standard error data if errors were encountered.
|
||||
|
||||
|
||||
|
||||
# Types
|
||||
|
@ -167,6 +185,8 @@ Defines types of data available on a specific entity.
|
|||
|
||||
Represents a room.
|
||||
|
||||
### Fields
|
||||
|
||||
**Name**: < string > Friendlyname of the room.
|
||||
|
||||
**RoomId**: < string > ID of the room (GUID).
|
||||
|
@ -177,6 +197,8 @@ Represents a room.
|
|||
|
||||
Represents a teacher.
|
||||
|
||||
### Fields
|
||||
|
||||
**FirstName**: < string > Teacher's first name.
|
||||
|
||||
**LastName**: < string > Teacher's last name.
|
||||
|
@ -193,4 +215,34 @@ Represents a teacher.
|
|||
|
||||
**Reported**: < bool > Purpose unknown.
|
||||
|
||||
**ReadOnly**: < bool > Purpose unknown.
|
||||
**ReadOnly**: < bool > Purpose unknown.
|
||||
|
||||
## Class
|
||||
|
||||
Represents a group of people, usually taking a course together.
|
||||
|
||||
### Fields
|
||||
|
||||
**Name**: < string > Friendlyname of the class.
|
||||
|
||||
**ClassId**: < string > ID of the class (GUID).
|
||||
|
||||
**AbsenceMessageNotDeliveredCount**: < int > Purpose unknown.
|
||||
|
||||
**IsResponsible**: < bool > Purpose unknown.
|
||||
|
||||
**IsClass**: < bool > Purpose unknown.
|
||||
|
||||
**IsAdmin**: < bool > Purpose unknown.
|
||||
|
||||
**IsPrincipal**: < bool > Purpose unknown.
|
||||
|
||||
**IsMentor**: < bool > Purpose unknown.
|
||||
|
||||
**IsPreschoolGroup**: < bool > Purpose unkown.
|
||||
|
||||
**Teachers**: < any > Teachers, typically mentors, for the class. WARNING: Currently untyped, use with caution.
|
||||
|
||||
**SubstituteTeacherId**: < any > Teacher ID of substitute teacher (if any). See [Teacher](#teacher).
|
||||
|
||||
**TeacherChangeStudents**: < int > Purpose unknown.
|
|
@ -22,7 +22,10 @@ func main() {
|
|||
schools, _ := api.GetSchools()
|
||||
|
||||
for _, school := range schools {
|
||||
fmt.Println(school.AvailableData)
|
||||
fmt.Println(school.Name)
|
||||
if school.AvailableData.HasCourses {
|
||||
fmt.Println("School has data")
|
||||
}
|
||||
}
|
||||
|
||||
rooms, err := api.GetRooms(schools[4], true)
|
||||
|
@ -43,12 +46,14 @@ func main() {
|
|||
fmt.Println(teacher.FullName)
|
||||
}
|
||||
|
||||
students, err := api.GetStudents(schools[4], true)
|
||||
classes, err := api.GetClasses(schools[4], true)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
|
||||
fmt.Println(students)
|
||||
for _, class := range classes {
|
||||
fmt.Println(class.Name)
|
||||
}
|
||||
|
||||
fmt.Println(key)
|
||||
}
|
||||
|
|
89
internal/requests/get_classes.go
Normal file
89
internal/requests/get_classes.go
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
GoSkola24API
|
||||
Copyright (C) 2024, Marco Vitchi Thulin
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License version 3
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License version 3 for more details.
|
||||
|
||||
This program incorporates external libraries for certain functionalities.
|
||||
These libraries are covered by their respective licenses, and their usage
|
||||
agreements are as outlined in their respective documentation or source
|
||||
code.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package requests
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"git.zervo.org/zervo/GoSkola24API/internal/types"
|
||||
pubtypes "git.zervo.org/zervo/GoSkola24API/pkg/goskola24api/types"
|
||||
)
|
||||
|
||||
func GetClasses(school pubtypes.School, checkAvailability bool) (_result []pubtypes.Class, _error error) {
|
||||
if checkAvailability && !school.AvailableData.HasClasses {
|
||||
return nil, errors.New("availability check failed: school does not provide class data")
|
||||
}
|
||||
|
||||
filters := types.RequestFilters{
|
||||
Class: true,
|
||||
Course: false,
|
||||
Group: false,
|
||||
Period: false,
|
||||
Room: false,
|
||||
Student: false,
|
||||
Subject: false,
|
||||
Teacher: false,
|
||||
}
|
||||
|
||||
responseMap, err := GetGenericSelection(school, filters)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to get classes: " + err.Error())
|
||||
}
|
||||
|
||||
// Extract classes as []interface{}
|
||||
classesRaw, ok := responseMap["classes"].([]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("missing or invalid \"classes\" field in response")
|
||||
}
|
||||
|
||||
// Convert raw classes into usable class type
|
||||
var classes []pubtypes.Class
|
||||
for _, classRaw := range classesRaw {
|
||||
classMap, ok := classRaw.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("unexpected room format")
|
||||
}
|
||||
|
||||
// Create class instance from data
|
||||
class := pubtypes.Class{
|
||||
Name: func() string { val, _ := classMap["groupName"].(string); return val }(),
|
||||
ClassId: func() string { val, _ := classMap["groupGuid"].(string); return val }(),
|
||||
AbsenceMessageNotDeliveredCount: func() int { val, _ := classMap["absenceMessageNotDeliveredCount"].(int); return val }(),
|
||||
IsResponsible: func() bool { val, _ := classMap["isResponsible"].(bool); return val }(),
|
||||
IsClass: func() bool { val, _ := classMap["isClass"].(bool); return val }(),
|
||||
IsAdmin: func() bool { val, _ := classMap["isAdmin"].(bool); return val }(),
|
||||
IsPrincipal: func() bool { val, _ := classMap["isPrincipal"].(bool); return val }(),
|
||||
IsMentor: func() bool { val, _ := classMap["isMentor"].(bool); return val }(),
|
||||
IsPreschoolGroup: func() bool { val, _ := classMap["isPreschoolGroup"].(bool); return val }(),
|
||||
Teachers: classMap["teachers"], // TODO: MAKE TYPED
|
||||
SubstituteTeacherId: func() string { val, _ := classMap["substituteTeacherGuid"].(string); return val }(),
|
||||
TeacherChangeStudents: func() int { val, _ := classMap["teacherChangeStudentsInGroup"].(int); return val }(),
|
||||
}
|
||||
|
||||
classes = append(classes, class)
|
||||
}
|
||||
|
||||
return classes, nil
|
||||
}
|
|
@ -52,3 +52,7 @@ func (api Skola24API) GetTeachers(school pubtypes.School, checkAvailability bool
|
|||
func (api Skola24API) GetStudents(school pubtypes.School, checkAvailability bool) (_result any, _error error) {
|
||||
return requests.GetStudents(school, checkAvailability)
|
||||
}
|
||||
|
||||
func (api Skola24API) GetClasses(school pubtypes.School, checkAvailability bool) (_result []pubtypes.Class, _error error) {
|
||||
return requests.GetClasses(school, checkAvailability)
|
||||
}
|
||||
|
|
40
pkg/goskola24api/types/classes.go
Normal file
40
pkg/goskola24api/types/classes.go
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
GoSkola24API
|
||||
Copyright (C) 2024, Marco Vitchi Thulin
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License version 3
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License version 3 for more details.
|
||||
|
||||
This program incorporates external libraries for certain functionalities.
|
||||
These libraries are covered by their respective licenses, and their usage
|
||||
agreements are as outlined in their respective documentation or source
|
||||
code.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package types
|
||||
|
||||
type Class struct {
|
||||
Name string `json:"name"`
|
||||
ClassId string `json:"classId"`
|
||||
AbsenceMessageNotDeliveredCount int `json:"absenceMessageNotDeliveredCount"`
|
||||
IsResponsible bool `json:"isResponsible"`
|
||||
IsClass bool `json:"isClass"`
|
||||
IsAdmin bool `json:"isAdmin"`
|
||||
IsPrincipal bool `json:"isPrincipal"`
|
||||
IsMentor bool `json:"isMentor"`
|
||||
IsPreschoolGroup bool `json:"isPreschoolGroup"`
|
||||
Teachers any `json:"teachers"` // TODO: MAKE TYPED
|
||||
SubstituteTeacherId string `json:"substituteTeacherId"`
|
||||
TeacherChangeStudents int `json:"teacherChangeStudents"`
|
||||
}
|
Loading…
Reference in a new issue