diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index ac4b793..8c971f4 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -62,7 +62,7 @@ func SaveSeminarGroupEvents(seminarGroup model.SeminarGroup, app *pocketbase.Poc return savedRecords, nil } -func SaveEventsTxDao(events []model.Event, txDao *daos.Dao) ([]model.Event, error) { +func SaveEvents(events []model.Event, txDao *daos.Dao) ([]model.Event, error) { var toBeSavedEvents model.Events var savedRecords model.Events @@ -93,38 +93,6 @@ func SaveEventsTxDao(events []model.Event, txDao *daos.Dao) ([]model.Event, erro return savedRecords, nil } -func SaveEvents(events []model.Event, app *pocketbase.PocketBase) ([]model.Event, error) { - var toBeSavedEvents model.Events - var savedRecords model.Events - - // check if event is already in database and add to toBeSavedEvents if not - for _, event := range events { - existsInDatabase, err := findEventByDayWeekStartEndNameCourse(event, event.Course, app.Dao()) - alreadyAddedToSave := toBeSavedEvents.Contains(event) - - if err != nil { - return nil, err - } - - if !existsInDatabase && !alreadyAddedToSave { - toBeSavedEvents = append(toBeSavedEvents, event) - } - } - - // create record for each event that's not already in the database - for _, event := range toBeSavedEvents { - event.MarkAsNew() - // auto mapping for event fields to record fields - err := app.Dao().Save(&event) - if err != nil { - return nil, err - } else { - savedRecords = append(savedRecords, event) - } - } - return savedRecords, nil -} - // check if event is already in database and return true if it is and false if it's not func findEventByDayWeekStartEndNameCourse(event model.Event, course string, dao *daos.Dao) (bool, error) { @@ -262,8 +230,17 @@ func GetAllModulesDistinctByNameAndCourse(app *pocketbase.PocketBase) ([]model.M return modules, nil } -func DeleteAllEventsByCourse(app *pocketbase.PocketBase, course string, semester string) error { - _, err := app.Dao().DB().Delete("events", dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).Execute() +func DeleteAllEventsByCourse(dao *daos.Dao, course string, semester string) error { + _, err := dao.DB().Delete("events", dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).Execute() + + if err != nil { + return err + } + return nil +} + +func DeleteAllEventsRatherThenCourse(dao *daos.Dao, course string, semester string) error { + _, err := dao.DB().Delete("events", dbx.NewExp("course != {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).Execute() if err != nil { return err diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index 77b8bb1..c9184c5 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -95,7 +95,7 @@ func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, err // If the deletion was successful, nil is returned // If the deletion was not successful, an error is returned func DeleteAllEventsByCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) error { - err := db.DeleteAllEventsByCourse(app, course, semester) + err := db.DeleteAllEventsByCourse(app.Dao(), course, semester) if err != nil { return err } else { @@ -174,7 +174,7 @@ func UpdateModulesForCourse(app *pocketbase.PocketBase, course string) (model.Ev } // save all events that are in the insertList - savedEvents, err := db.SaveEvents(insertList, app) + savedEvents, err := db.SaveEvents(insertList, app.Dao()) if err != nil { slog.Error("Failed to save events: ", "error", err) return nil, err diff --git a/backend/service/fetch/sport/sportFetcher.go b/backend/service/fetch/sport/sportFetcher.go index c2dac05..4cb619c 100644 --- a/backend/service/fetch/sport/sportFetcher.go +++ b/backend/service/fetch/sport/sportFetcher.go @@ -82,13 +82,13 @@ func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) ([]model.Event, error } // @TODO: delete and save events in one transaction and it only should delete events that are not in the new events list and save events that are not in the database - err = db.DeleteAllEventsByCourse(app, "Sport", functions.GetCurrentSemesterString(clock.RealClock{})) + err = db.DeleteAllEventsByCourse(app.Dao(), "Sport", functions.GetCurrentSemesterString(clock.RealClock{})) if err != nil { return nil, err } // save events to database - savedEvents, err := db.SaveEvents(events, app) + savedEvents, err := db.SaveEvents(events, app.Dao()) if err != nil { return nil, err diff --git a/backend/service/fetch/v2/fetcher.go b/backend/service/fetch/v2/fetcher.go index 131b85f..35cc75a 100644 --- a/backend/service/fetch/v2/fetcher.go +++ b/backend/service/fetch/v2/fetcher.go @@ -17,10 +17,8 @@ package v2 import ( - "database/sql" "fmt" "github.com/google/uuid" - "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/daos" "golang.org/x/net/html" @@ -109,18 +107,12 @@ func updateDatabase(app *pocketbase.PocketBase, eventsToBeAdded []model.Event, c // to in transaction the events will be added and deleted err = app.Dao().RunInTransaction(func(txDao *daos.Dao) error { - var execute sql.Result - execute, err = txDao.DB().Delete("events", - dbx.NewExp("course != {:course} AND semester = {:semester}", - dbx.Params{"course": course, "semester": semester})).Execute() + err = db.DeleteAllEventsRatherThenCourse(txDao, course, semester) if err != nil { return err } - var rows int64 - rows, err = execute.RowsAffected() - slog.Info("Deleted events: ", "events", rows) - addedEvents, err = db.SaveEventsTxDao(eventsToBeAdded, txDao) + addedEvents, err = db.SaveEvents(eventsToBeAdded, txDao) if err != nil { return err }