package v3 import ( "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/models" "golang.org/x/net/http2" "htwkalender/model" "htwkalender/service/db" "log/slog" "net/http" "strconv" ) func FetchAllResources(app *pocketbase.PocketBase) ([]*models.Record, error) { var groups []model.SeminarGroup client := &http.Client{} client.Transport = &http2.Transport{} apiUrl := "https://luna.htwk-leipzig.de/api/" seminarUrl := apiUrl + "studierendengruppen" parsedSeminarGroups, err := parseSeminarGroups(seminarUrl, client) if err != nil { slog.Error("Error while fetching seminar groups", err) return nil, err } studyTypeUrl := apiUrl + "studiengaenge" parsedStudyTypes, err := parseStudyTypes(studyTypeUrl, client) if err != nil { slog.Error("Error while fetching study types", err) return nil, err } facultyUrl := apiUrl + "fakultaeten" parsedFaculties, err := parseFaculties(facultyUrl, client) if err != nil { slog.Error("Error while fetching faculties", err) return nil, err } slog.Info("Fetched study types: " + strconv.Itoa(len(parsedStudyTypes))) slog.Info("Fetched seminar groups: " + strconv.Itoa(len(parsedSeminarGroups.Groups)) + " of " + strconv.Itoa(parsedSeminarGroups.TotalItems)) slog.Info("Fetched faculties: " + strconv.Itoa(len(parsedFaculties.Faculties))) // map seminar groups to model seminar groups for _, group := range parsedSeminarGroups.Groups { var newGroup model.SeminarGroup newGroup.University = "HTWK Leipzig" newGroup.Course = group.SeminarGroup newGroup.Faculty = group.Faculty newGroup.Semester = group.Semester // find corresponding study type by studiengang in parsedStudyTypes for _, studyTypeItem := range parsedStudyTypes { if studyTypeItem.ID == group.Studiengang { newGroup.GroupShortcut = studyTypeItem.Description newGroup.GroupId = studyTypeItem.GroupID break } } for _, facultyItem := range parsedFaculties.Faculties { if facultyItem.ID == group.Faculty { newGroup.FacultyId = facultyItem.ShortCut newGroup.Faculty = facultyItem.Description break } } groups = append(groups, newGroup) } collection, dbError := db.FindCollection(app, "groups") if dbError != nil { slog.Error("Error while searching collection groups", dbError) return nil, err } var insertedGroups []*models.Record insertedGroups, dbError = db.SaveGroups(groups, collection, app) if dbError != nil { slog.Error("Error while saving groups", dbError) return nil, err } //Now fetch all events eventUrl := apiUrl + "veranstaltungen" parsedEvents, err := parseEvents(eventUrl, client) slog.Info("Fetched events: " + strconv.Itoa(len(parsedEvents.Events)) + " of " + strconv.Itoa(parsedEvents.TotalItems)) return insertedGroups, nil }