From 0198e74652a68fd6a3260a85428d82697bca2fbf Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Tue, 23 Jan 2024 18:16:12 +0100 Subject: [PATCH] feat:#150 rewrite error handling for routes --- backend/service/addCalDavRoutes.go | 68 +++++++++++++------------- backend/service/addRoute.go | 43 ++++++++++------ backend/service/events/eventService.go | 15 ++---- 3 files changed, 66 insertions(+), 60 deletions(-) diff --git a/backend/service/addCalDavRoutes.go b/backend/service/addCalDavRoutes.go index 04ca9af..81fbb3f 100644 --- a/backend/service/addCalDavRoutes.go +++ b/backend/service/addCalDavRoutes.go @@ -68,40 +68,6 @@ func addFeedRoutes(app *pocketbase.PocketBase) { return nil }) - app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - _, err := e.Router.AddRoute(echo.Route{ - Method: http.MethodHead, - Path: "/api/feed", - Handler: func(c echo.Context) error { - return c.JSON(http.StatusOK, "") - }, - 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: "PROPFIND", - Path: "/api/feed", - Handler: func(c echo.Context) error { - return c.JSON(http.StatusOK, "") - }, - 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, @@ -180,4 +146,38 @@ func addFeedRoutes(app *pocketbase.PocketBase) { } return nil }) + + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + _, err := e.Router.AddRoute(echo.Route{ + Method: "PROPFIND", + Path: "/api/feed", + Handler: func(c echo.Context) error { + return c.JSON(http.StatusOK, "") + }, + 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.MethodHead, + Path: "/api/feed", + Handler: func(c echo.Context) error { + return c.JSON(http.StatusOK, "") + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + }, + }) + if err != nil { + return err + } + return nil + }) } diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index 35ef5e7..da1dcc7 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -26,7 +26,7 @@ func AddRoutes(app *pocketbase.PocketBase) { savedEvents, err := v2.ParseEventsFromRemote(app) if err != nil { slog.Error("Failed to parse events from remote: %v", err) - return c.JSON(http.StatusInternalServerError, "Failed to parse events from remote") + return c.JSON(http.StatusBadRequest, "Failed to parse events from remote") } else { return c.JSON(http.StatusOK, savedEvents) } @@ -49,7 +49,7 @@ func AddRoutes(app *pocketbase.PocketBase) { Handler: func(c echo.Context) error { groups, err := v1.FetchSeminarGroups(app) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to fetch seminar groups") + return c.JSON(http.StatusBadRequest, "Failed to fetch seminar groups") } return c.JSON(http.StatusOK, groups) }, @@ -72,7 +72,7 @@ func AddRoutes(app *pocketbase.PocketBase) { sportEvents, err := sport.FetchAndUpdateSportEvents(app) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to fetch sport events") + return c.JSON(http.StatusBadRequest, "Failed to fetch sport events") } return c.JSON(http.StatusOK, sportEvents) }, @@ -94,7 +94,7 @@ func AddRoutes(app *pocketbase.PocketBase) { Handler: func(c echo.Context) error { err := events.DeleteAllEvents(app) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to delete events") + return c.JSON(http.StatusBadRequest, "Failed to delete events") } return c.JSON(http.StatusOK, "Events deleted") }, @@ -116,7 +116,7 @@ func AddRoutes(app *pocketbase.PocketBase) { Handler: func(c echo.Context) error { rooms, err := room.GetRooms(app) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to get rooms") + return c.JSON(http.StatusBadRequest, "Failed to get rooms") } return c.JSON(http.StatusOK, rooms) }, @@ -140,7 +140,8 @@ func AddRoutes(app *pocketbase.PocketBase) { date := c.QueryParam("date") roomSchedule, err := room.GetRoomScheduleForDay(app, roomParam, date) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to get room schedule for day") + slog.Error("Failed to get room schedule for day: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to get room schedule for day") } return c.JSON(http.StatusOK, roomSchedule) }, @@ -165,7 +166,8 @@ func AddRoutes(app *pocketbase.PocketBase) { from := c.QueryParam("from") roomSchedule, err := room.GetRoomSchedule(app, roomParam, from, to) if err != nil { - return c.JSON(http.StatusInternalServerError, "Failed to get room schedule") + slog.Error("Failed to get room schedule: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to get room schedule") } return c.JSON(http.StatusOK, roomSchedule) }, @@ -191,9 +193,10 @@ func AddRoutes(app *pocketbase.PocketBase) { modules, err := events.GetModulesForCourseDistinct(app, course, semester) if err != nil { - return c.JSON(400, err) + slog.Error("Failed to get modules for course and semester: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to get modules for course and semester") } else { - return c.JSON(200, modules) + return c.JSON(http.StatusOK, modules) } }, Middlewares: []echo.MiddlewareFunc{ @@ -211,7 +214,12 @@ func AddRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/modules", Handler: func(c echo.Context) error { - return events.GetAllModulesDistinct(app, c) + modules, err := events.GetAllModulesDistinct(app) + if err != nil { + slog.Error("Failed to get modules: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to get modules") + } + return c.JSON(http.StatusOK, modules) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), @@ -231,9 +239,10 @@ func AddRoutes(app *pocketbase.PocketBase) { requestModule := c.QueryParam("uuid") module, err := events.GetModuleByUUID(app, requestModule) if err != nil { - return c.JSON(400, err) + slog.Error("Failed to get module: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to get module") } else { - return c.JSON(200, module) + return c.JSON(http.StatusOK, module) } }, Middlewares: []echo.MiddlewareFunc{ @@ -273,9 +282,10 @@ func AddRoutes(app *pocketbase.PocketBase) { semester := c.QueryParam("semester") err := events.DeleteAllEventsByCourseAndSemester(app, course, semester) if err != nil { - return c.JSON(400, err) + slog.Error("Failed to delete events: %v", err) + return c.JSON(http.StatusBadRequest, "Failed to delete events") } else { - return c.JSON(200, "Events deleted") + return c.JSON(http.StatusBadRequest, "Events deleted") } }, Middlewares: []echo.MiddlewareFunc{ @@ -297,9 +307,10 @@ func AddRoutes(app *pocketbase.PocketBase) { err := ical.MigrateFeedJson(app) if err != nil { - return c.JSON(500, err) + slog.Error("Failed to migrate feeds: %v", err) + return c.JSON(http.StatusInternalServerError, "Failed to migrate feeds") } else { - return c.JSON(200, "Migrated") + return c.JSON(http.StatusOK, "Migrated") } }, Middlewares: []echo.MiddlewareFunc{ diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index d217ffa..f649d22 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -1,7 +1,6 @@ package events import ( - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "htwkalender/model" "htwkalender/service/db" @@ -40,21 +39,17 @@ func replaceEmptyEntry(namedList []Named, replacement string) { // GetAllModulesDistinct returns all modules distinct by name and course from the database // That means you get all modules with duplicates if they have different courses -func GetAllModulesDistinct(app *pocketbase.PocketBase, c echo.Context) error { +func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]model.ModuleDTO, error) { modules, err := db.GetAllModulesDistinctByNameAndCourse(app) - + if err != nil { + return nil, err + } var namedModules []Named for _, module := range modules { namedModules = append(namedModules, &module) } - replaceEmptyEntry(namedModules, "Sonderveranstaltungen") - - if err != nil { - return c.JSON(400, err) - } else { - return c.JSON(200, modules) - } + return modules, nil } func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, error) {