diff --git a/backend/main.go b/backend/main.go index 5e170be..272cba2 100644 --- a/backend/main.go +++ b/backend/main.go @@ -24,6 +24,8 @@ func main() { service.AddRoutes(app) + service.AddSchedules(app) + if err := app.Start(); err != nil { log.Fatal(err) } diff --git a/backend/model/moduleModel.go b/backend/model/moduleModel.go new file mode 100644 index 0000000..ab0d17f --- /dev/null +++ b/backend/model/moduleModel.go @@ -0,0 +1,9 @@ +package model + +type Module struct { + Name string `json:"name"` + Prof string `json:"prof"` + Course string `json:"course"` + Semester string `json:"semester"` + Events Events `json:"events"` +} diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index 20b9e24..f0abc62 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -132,7 +132,13 @@ func AddRoutes(app *pocketbase.PocketBase) { Handler: func(c echo.Context) error { course := c.QueryParam("course") semester := c.QueryParam("semester") - return events.GetModulesForCourseDistinct(app, c, course, semester) + modules, err := events.GetModulesForCourseDistinct(app, course, semester) + + if err != nil { + return c.JSON(400, err) + } else { + return c.JSON(200, modules) + } }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), @@ -161,12 +167,61 @@ func AddRoutes(app *pocketbase.PocketBase) { return nil }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + _, err := e.Router.AddRoute(echo.Route{ + Method: http.MethodGet, + Path: "/api/module", + Handler: func(c echo.Context) error { + name := c.QueryParam("name") + module, err := events.GetModuleByName(app, name) + + if err != nil { + return c.JSON(400, err) + } else { + return c.JSON(200, module) + } + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + }, + }) + if err != nil { + return err + } + return nil + }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/api/courses", Handler: func(c echo.Context) error { - return events.GetAllCourses(app, c) + courses := events.GetAllCourses(app) + return c.JSON(200, courses) + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + }, + }) + if err != nil { + return err + } + return nil + }) + + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + _, err := e.Router.AddRoute(echo.Route{ + Method: http.MethodDelete, + Path: "/api/events", + Handler: func(c echo.Context) error { + course := c.QueryParam("course") + semester := c.QueryParam("semester") + err := events.DeleteAllEventsByCourseAndSemester(app, course, semester) + if err != nil { + return c.JSON(400, err) + } else { + return c.JSON(200, "Events deleted") + } }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), diff --git a/backend/service/addSchedule.go b/backend/service/addSchedule.go new file mode 100644 index 0000000..fa36aff --- /dev/null +++ b/backend/service/addSchedule.go @@ -0,0 +1,37 @@ +package service + +import ( + "github.com/pocketbase/pocketbase" + "github.com/pocketbase/pocketbase/core" + "github.com/pocketbase/pocketbase/tools/cron" + "htwkalender/service/events" + "log" +) + +func AddSchedules(app *pocketbase.PocketBase) { + + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + scheduler := cron.New() + + scheduler.MustAdd("updateCourse", "*/60 * * * *", func() { + + courses := events.GetAllCourses(app) + + for _, course := range courses { + err := events.UpdateModulesForCourse(app, course) + if err != nil { + log.Println("Update Course: " + course + " failed") + log.Println(err) + } else { + log.Println("Update Course: " + course + " successful") + } + } + + }) + + scheduler.Start() + + return nil + }) + +} diff --git a/backend/service/fetch/fetchSeminarEventService.go b/backend/service/fetch/fetchSeminarEventService.go index 4e40819..24e6baa 100644 --- a/backend/service/fetch/fetchSeminarEventService.go +++ b/backend/service/fetch/fetchSeminarEventService.go @@ -28,9 +28,9 @@ func GetSeminarEvents(c echo.Context, app *pocketbase.PocketBase) error { return apis.NewNotFoundError("Collection not found", dbError) } - seminarGroups = clearEmptySeminarGroups(seminarGroups) + seminarGroups = ClearEmptySeminarGroups(seminarGroups) - seminarGroups = replaceEmptyEventNames(seminarGroups) + seminarGroups = ReplaceEmptyEventNames(seminarGroups) savedRecords, dbError := db.SaveEvents(seminarGroups, collection, app) @@ -41,7 +41,7 @@ func GetSeminarEvents(c echo.Context, app *pocketbase.PocketBase) error { return c.JSON(http.StatusOK, savedRecords) } -func replaceEmptyEventNames(groups []model.SeminarGroup) []model.SeminarGroup { +func ReplaceEmptyEventNames(groups []model.SeminarGroup) []model.SeminarGroup { for i, group := range groups { for j, event := range group.Events { if event.Name == "" { @@ -52,7 +52,7 @@ func replaceEmptyEventNames(groups []model.SeminarGroup) []model.SeminarGroup { return groups } -func clearEmptySeminarGroups(seminarGroups []model.SeminarGroup) []model.SeminarGroup { +func ClearEmptySeminarGroups(seminarGroups []model.SeminarGroup) []model.SeminarGroup { var newSeminarGroups []model.SeminarGroup for _, seminarGroup := range seminarGroups { if len(seminarGroup.Events) > 0 && seminarGroup.Course != "" { diff --git a/backend/service/fetch/fetchSeminarEventService_test.go b/backend/service/fetch/fetchSeminarEventService_test.go index 88bb460..b3d95d4 100644 --- a/backend/service/fetch/fetchSeminarEventService_test.go +++ b/backend/service/fetch/fetchSeminarEventService_test.go @@ -113,8 +113,8 @@ func Test_replaceEmptyEventNames(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := replaceEmptyEventNames(tt.args.groups); !reflect.DeepEqual(got, tt.want) { - t.Errorf("replaceEmptyEventNames() = %v, want %v", got, tt.want) + if got := ReplaceEmptyEventNames(tt.args.groups); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ReplaceEmptyEventNames() = %v, want %v", got, tt.want) } }) } diff --git a/frontend/src/model/module.ts b/frontend/src/model/module.ts index eff8f67..263f315 100644 --- a/frontend/src/model/module.ts +++ b/frontend/src/model/module.ts @@ -1,5 +1,6 @@ export class Module { constructor( + public Id: string, public Name: string, public Course: string, public UserDefinedName: string,