From 70170054e8293e5727dadda2151e3aa038205a19 Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Mon, 22 Jan 2024 12:17:53 +0100 Subject: [PATCH] feat:#150 added slog for more functions and improved return signature --- backend/service/addRoute.go | 6 +++- backend/service/fetch/sport/sportFetcher.go | 34 +++++++++++++------ .../fetch/v1/fetchSeminarGroupService.go | 26 ++++++++++---- backend/service/logger/logger.go | 1 - 4 files changed, 48 insertions(+), 19 deletions(-) delete mode 100644 backend/service/logger/logger.go diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index 1202c87..2e0f4b5 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -49,7 +49,11 @@ func AddRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/fetch/groups", Handler: func(c echo.Context) error { - return v1.SeminarGroups(c, app) + groups, err := v1.FetchSeminarGroups(app) + if err != nil { + return c.JSON(http.StatusInternalServerError, "Failed to fetch seminar groups") + } + return c.JSON(http.StatusOK, groups) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), diff --git a/backend/service/fetch/sport/sportFetcher.go b/backend/service/fetch/sport/sportFetcher.go index 1bff08a..6f7dbb8 100644 --- a/backend/service/fetch/sport/sportFetcher.go +++ b/backend/service/fetch/sport/sportFetcher.go @@ -8,6 +8,8 @@ import ( "htwkalender/model" "htwkalender/service/db" "htwkalender/service/functions" + "io" + "log/slog" "net/http" "regexp" "strconv" @@ -21,9 +23,14 @@ import ( // FetchAndUpdateSportEvents fetches all sport events from the HTWK sport website // it deletes them first and then saves them to the database // It returns all saved events -func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) []model.Event { +func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) ([]model.Event, error) { + + sportCourseLinks, err := fetchAllAvailableSportCourses() + + if err != nil { + return nil, err + } - var sportCourseLinks = fetchAllAvailableSportCourses() sportEntries := fetchHTWKSportCourses(sportCourseLinks) events := formatEntriesToEvents(sportEntries) @@ -43,7 +50,7 @@ func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) []model.Event { // get all events from database where name = Feiertage und lehrveranstaltungsfreie Tage holidays, err := db.GetAllModulesByNameAndDateRange(app, "Feiertage und lehrveranstaltungsfreie Tage", earliestDate, latestDate) if err != nil { - return nil + return nil, err } // remove all events that have same year, month and day as items in holidays @@ -60,17 +67,17 @@ func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) []model.Event { // @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.DeleteAllEventsForCourse(app, "Sport", functions.GetCurrentSemesterString()) if err != nil { - return nil + return nil, err } // save events to database savedEvents, err := db.SaveEvents(events, app) if err != nil { - return nil + return nil, err } - return savedEvents + return savedEvents, nil } @@ -305,13 +312,14 @@ func checkSemester(date time.Time) string { } // fetch the main page where all sport courses are listed and extract all links to the sport courses -func fetchAllAvailableSportCourses() []string { +func fetchAllAvailableSportCourses() ([]string, error) { var url = "https://sport.htwk-leipzig.de/sportangebote" var doc, err = htmlRequest(url) if err != nil { - return nil + slog.Error("Error while fetching sport courses from webpage", err) + return nil, err } // link list of all sport courses @@ -325,7 +333,7 @@ func fetchAllAvailableSportCourses() []string { } }) - return links + return links, nil } // fetchAllHTWKSportCourses fetches all sport courses from the given links. @@ -372,7 +380,13 @@ func htmlRequest(url string) (*goquery.Document, error) { if err != nil { return nil, err } - defer resp.Body.Close() + defer func(Body io.ReadCloser) { + readErr := Body.Close() + if readErr != nil { + slog.Error("Error while closing response body from html request", readErr) + return + } + }(resp.Body) doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { diff --git a/backend/service/fetch/v1/fetchSeminarGroupService.go b/backend/service/fetch/v1/fetchSeminarGroupService.go index 0d39595..2baf0f9 100644 --- a/backend/service/fetch/v1/fetchSeminarGroupService.go +++ b/backend/service/fetch/v1/fetchSeminarGroupService.go @@ -3,13 +3,12 @@ package v1 import ( "encoding/xml" "fmt" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" - "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/models" "htwkalender/model" "htwkalender/service/db" "io" + "log/slog" "net/http" ) @@ -41,12 +40,23 @@ func getSeminarHTML(semester string) (string, error) { } -func SeminarGroups(c echo.Context, app *pocketbase.PocketBase) error { +func FetchSeminarGroups(app *pocketbase.PocketBase) ([]*models.Record, error) { var groups []model.SeminarGroup - resultSummer, _ := getSeminarHTML("ss") + resultSummer, err := getSeminarHTML("ss") + + if err != nil { + slog.Error("Error while fetching seminar groups for winter semester", err) + return nil, err + } + resultWinter, _ := getSeminarHTML("ws") + if err != nil { + slog.Error("Error while fetching seminar groups for summer semester", err) + return nil, err + } + groups = parseSeminarGroups(resultSummer) groups = append(groups, parseSeminarGroups(resultWinter)...) @@ -55,16 +65,18 @@ func SeminarGroups(c echo.Context, app *pocketbase.PocketBase) error { collection, dbError := db.FindCollection(app, "groups") if dbError != nil { - return apis.NewNotFoundError("Collection not found", dbError) + slog.Error("Error while searching collection groups", dbError) + return nil, err } var insertedGroups []*models.Record insertedGroups, dbError = db.SaveGroups(groups, collection, app) if dbError != nil { - return apis.NewNotFoundError("Records could not be saved", dbError) + slog.Error("Error while saving groups", dbError) + return nil, err } - return c.JSON(http.StatusOK, insertedGroups) + return insertedGroups, nil } func removeDuplicates(groups []model.SeminarGroup) []model.SeminarGroup { diff --git a/backend/service/logger/logger.go b/backend/service/logger/logger.go deleted file mode 100644 index 90c66f6..0000000 --- a/backend/service/logger/logger.go +++ /dev/null @@ -1 +0,0 @@ -package logger