diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index a767ee0..795d91d 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -33,6 +33,24 @@ func AddRoutes(app *pocketbase.PocketBase) { return nil }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + _, err := e.Router.AddRoute(echo.Route{ + Method: http.MethodDelete, + Path: "/api/modules", + Handler: func(c echo.Context) error { + return events.DeleteAllEvents(app) + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + apis.RequireAdminAuth(), + }, + }) + if err != nil { + return err + } + return nil + }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index 884d7bb..ee6f1d5 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -179,6 +179,17 @@ func DeleteAllEventsForCourse(app *pocketbase.PocketBase, course string, semeste return nil } +func DeleteAllEvents(app *pocketbase.PocketBase) error { + + _, err := app.Dao().DB().Delete("events", dbx.NewExp("1=1")).Execute() + + if err != nil { + return err + } + + return nil +} + func FindAllEventsByModule(app *pocketbase.PocketBase, moduleName string) (model.Events, error) { var events model.Events diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index 52128a0..e114bff 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -75,6 +75,15 @@ func DeleteAllEventsByCourseAndSemester(app *pocketbase.PocketBase, course strin } } +func DeleteAllEvents(app *pocketbase.PocketBase) error { + err := db.DeleteAllEvents(app) + if err != nil { + return err + } else { + return nil + } +} + // UpdateModulesForCourse updates all modules for a course // Does Updates for ws and ss semester sequentially // Update runs through the following steps: diff --git a/backend/service/fetch/fetchSeminarEventService.go b/backend/service/fetch/fetchSeminarEventService.go index da2dafb..183b1aa 100644 --- a/backend/service/fetch/fetchSeminarEventService.go +++ b/backend/service/fetch/fetchSeminarEventService.go @@ -96,21 +96,22 @@ func parseSeminarGroup(result string) model.SeminarGroup { splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks) events := splitEventsBySingleWeek(splitEventsByWeekVal) semesterString := findFirstSpanWithClass(table, "header-0-2-0").FirstChild.Data + course := findFirstSpanWithClass(table, "header-2-0-1").FirstChild.Data semester, year := extractSemesterAndYear(semesterString) events = convertWeeksToDates(events, semester, year) - events = generateUUIDs(events) + events = generateUUIDs(events, course) var seminarGroup = model.SeminarGroup{ University: findFirstSpanWithClass(table, "header-1-0-0").FirstChild.Data, - Course: findFirstSpanWithClass(table, "header-2-0-1").FirstChild.Data, + Course: course, Events: events, } return seminarGroup } -func generateUUIDs(events []model.Event) []model.Event { +func generateUUIDs(events []model.Event, course string) []model.Event { for i, event := range events { // generate a hash value from the event name, course and semester - hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+event.Course+event.Semester)) + hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+course)) events[i].UUID = hash.String() } return events diff --git a/backend/service/fetch/fetchSeminarEventService_test.go b/backend/service/fetch/fetchSeminarEventService_test.go index 3284402..f1fce7e 100644 --- a/backend/service/fetch/fetchSeminarEventService_test.go +++ b/backend/service/fetch/fetchSeminarEventService_test.go @@ -118,3 +118,67 @@ func Test_replaceEmptyEventNames(t *testing.T) { }) } } + +func Test_generateUUIDs(t *testing.T) { + type args struct { + events []model.Event + } + tests := []struct { + name string + args args + want []model.Event + }{ + { + name: "Test 1", + args: args{ + events: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + }, + }, + }, + want: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + }, + }, + }, + { + name: "Test 2", + args: args{ + events: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-3a", + }, + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + }, + }, + }, + want: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-3a", + UUID: "9f90d86b-a948-53b9-bbbc-5163acc1cf33", + }, + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := generateUUIDs(tt.args.events); !reflect.DeepEqual(got, tt.want) { + t.Errorf("generateUUIDs() = %v, want %v", got, tt.want) + } + }) + } +}