Add classes
This commit is contained in:
parent
e5916ea22a
commit
4898ffb6ee
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.
|
**_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
|
# Types
|
||||||
|
@ -167,6 +185,8 @@ Defines types of data available on a specific entity.
|
||||||
|
|
||||||
Represents a room.
|
Represents a room.
|
||||||
|
|
||||||
|
### Fields
|
||||||
|
|
||||||
**Name**: < string > Friendlyname of the room.
|
**Name**: < string > Friendlyname of the room.
|
||||||
|
|
||||||
**RoomId**: < string > ID of the room (GUID).
|
**RoomId**: < string > ID of the room (GUID).
|
||||||
|
@ -177,6 +197,8 @@ Represents a room.
|
||||||
|
|
||||||
Represents a teacher.
|
Represents a teacher.
|
||||||
|
|
||||||
|
### Fields
|
||||||
|
|
||||||
**FirstName**: < string > Teacher's first name.
|
**FirstName**: < string > Teacher's first name.
|
||||||
|
|
||||||
**LastName**: < string > Teacher's last name.
|
**LastName**: < string > Teacher's last name.
|
||||||
|
@ -193,4 +215,34 @@ Represents a teacher.
|
||||||
|
|
||||||
**Reported**: < bool > Purpose unknown.
|
**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()
|
schools, _ := api.GetSchools()
|
||||||
|
|
||||||
for _, school := range schools {
|
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)
|
rooms, err := api.GetRooms(schools[4], true)
|
||||||
|
@ -43,12 +46,14 @@ func main() {
|
||||||
fmt.Println(teacher.FullName)
|
fmt.Println(teacher.FullName)
|
||||||
}
|
}
|
||||||
|
|
||||||
students, err := api.GetStudents(schools[4], true)
|
classes, err := api.GetClasses(schools[4], true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err.Error())
|
fmt.Println(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(students)
|
for _, class := range classes {
|
||||||
|
fmt.Println(class.Name)
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Println(key)
|
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, Zervó Zadachin
|
||||||
|
|
||||||
|
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) {
|
func (api Skola24API) GetStudents(school pubtypes.School, checkAvailability bool) (_result any, _error error) {
|
||||||
return requests.GetStudents(school, checkAvailability)
|
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, Zervó Zadachin
|
||||||
|
|
||||||
|
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