package service import ( "htwkalender/model" "htwkalender/service/events" "htwkalender/service/fetch" "htwkalender/service/ical" "htwkalender/service/room" "io" "net/http" "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" ) func AddRoutes(app *pocketbase.PocketBase) { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/api/fetchPlans", Handler: func(c echo.Context) error { return fetch.GetSeminarEvents(c, app) }, 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/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, Path: "/api/fetchGroups", Handler: func(c echo.Context) error { return fetch.SeminarGroups(c, app) }, 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/rooms", Handler: func(c echo.Context) error { return room.GetRooms(c, app) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), }, }) if err != nil { return err } return nil }) // API Endpoint to get all events for a specific room on a specific day app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/api/schedule/day", Handler: func(c echo.Context) error { roomParam := c.QueryParam("room") date := c.QueryParam("date") return room.GetRoomScheduleForDay(c, app, roomParam, date) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), }, }) if err != nil { return err } return nil }) // API Endpoint to create a new iCal feed app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/api/schedule", Handler: func(c echo.Context) error { roomParam := c.QueryParam("room") to := c.QueryParam("to") from := c.QueryParam("from") return room.GetRoomSchedule(c, app, roomParam, from, to) }, 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.MethodPost, Path: "/api/createFeed", Handler: func(c echo.Context) error { requestBody, _ := io.ReadAll(c.Request().Body) result, err := ical.CreateIndividualFeed(requestBody, app) if err != nil { return c.JSON(http.StatusInternalServerError, err) } return c.JSON(http.StatusOK, result) }, 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/feed", Handler: func(c echo.Context) error { token := c.QueryParam("token") return ical.Feed(c, app, token) }, 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/course/modules", Handler: func(c echo.Context) error { course := c.QueryParam("course") semester := c.QueryParam("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), }, }) 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/modules", Handler: func(c echo.Context) error { return events.GetAllModulesDistinct(app, c) }, 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.MethodPost, Path: "/api/module", Handler: func(c echo.Context) error { var requestModule model.Module if err := c.Bind(&requestModule); err != nil { return apis.NewBadRequestError("Failed to read request body", err) } module, err := events.GetModuleByName(app, requestModule) 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 { 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), 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, Path: "/api/feed/migrate", Handler: func(c echo.Context) error { err := ical.MigrateFeedJson(app) if err != nil { return c.JSON(500, err) } else { return c.JSON(200, "Migrated") } }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), apis.RequireAdminAuth(), }, }) if err != nil { return err } return nil }) }