From a7e523f97bde5a896aba66c66922deff6126addc Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Sat, 8 Mar 2025 23:25:53 +0100 Subject: [PATCH] fix:#68 course insert update fetcher --- services/data-manager/service/db/dbEvents.go | 13 +++++++++++++ .../data-manager/service/events/eventService.go | 4 ++-- .../service/fetch/v1/fetchSeminarEventService.go | 5 +++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/services/data-manager/service/db/dbEvents.go b/services/data-manager/service/db/dbEvents.go index 7c7c174..95b5698 100644 --- a/services/data-manager/service/db/dbEvents.go +++ b/services/data-manager/service/db/dbEvents.go @@ -213,6 +213,19 @@ func GetAllEventsForCourse(app *pocketbase.PocketBase, course string) (model.Eve return events, nil } +func GetAllEventsForCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) (model.Events, error) { + var events model.Events + + // get all events from event records in the events collection + err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).All(&events) + if err != nil { + slog.Error("Error while getting events from database: ", "error", err) + return nil, fmt.Errorf("error while getting events from database for course %s", course) + } + + return events, nil +} + func GetAllModulesForCourse(app *pocketbase.PocketBase, course string, semester string) (model.Events, error) { var events model.Events diff --git a/services/data-manager/service/events/eventService.go b/services/data-manager/service/events/eventService.go index f0a3534..2a3c756 100644 --- a/services/data-manager/service/events/eventService.go +++ b/services/data-manager/service/events/eventService.go @@ -151,7 +151,7 @@ func (s *PocketBaseEventService) UpdateModulesForCourse(seminarGroup model.Semin //if there are no events in the database, save the new events //get all events for the course and the semester - dbEvents, err := db.GetAllEventsForCourse(s.app, seminarGroup.Course) + dbEvents, err := db.GetAllEventsForCourseAndSemester(s.app, seminarGroup.Course, seminarGroup.Semester) if err != nil { return nil, err } @@ -197,7 +197,7 @@ func (s *PocketBaseEventService) UpdateModulesForCourse(seminarGroup model.Semin return nil, err } - slog.Info("Course: " + seminarGroup.Course + " - Event changes: " + strconv.FormatInt(int64(len(insertList)), 10) + " new events, " + strconv.FormatInt(int64(len(deleteList)), 10) + " deleted events") + slog.Info("Course: " + seminarGroup.Course + " [" + seminarGroup.Semester + "] - Events: " + strconv.FormatInt(int64(len(savedEvents)), 10) + " new, " + strconv.FormatInt(int64(len(deleteList)), 10) + " deleted" + ", " + strconv.FormatInt(int64(len(dbEvents)-len(deleteList)+len(savedEvents)), 10) + " total") return savedEvents, nil } diff --git a/services/data-manager/service/fetch/v1/fetchSeminarEventService.go b/services/data-manager/service/fetch/v1/fetchSeminarEventService.go index 9a0aa1a..515e64f 100644 --- a/services/data-manager/service/fetch/v1/fetchSeminarEventService.go +++ b/services/data-manager/service/fetch/v1/fetchSeminarEventService.go @@ -69,7 +69,7 @@ func FetchAndParse(season, label string) (model.SeminarGroup, error) { if err != nil { return model.SeminarGroup{}, err } - return parseSeminarGroup(result), nil + return parseSeminarGroup(result, season), nil } func SplitEventType(events []model.Event) ([]model.Event, error) { @@ -90,7 +90,7 @@ func SplitEventType(events []model.Event) ([]model.Event, error) { return events, nil } -func parseSeminarGroup(result string) model.SeminarGroup { +func parseSeminarGroup(result string, semester string) model.SeminarGroup { doc, err := html.Parse(strings.NewReader(result)) if err != nil { fmt.Printf("Error occurred while parsing the HTML document: %s\n", err.Error()) @@ -134,6 +134,7 @@ func parseSeminarGroup(result string) model.SeminarGroup { University: findFirstSpanWithClass(table, "header-1-0-0").FirstChild.Data, Course: course, Events: events, + Semester: semester, } return seminarGroup }