feat:#150 added slog for more functions and improved return signature

This commit is contained in:
Elmar Kresse
2024-01-22 12:17:53 +01:00
parent 95a256929d
commit 70170054e8
4 changed files with 48 additions and 19 deletions

View File

@@ -49,7 +49,11 @@ func AddRoutes(app *pocketbase.PocketBase) {
Method: http.MethodGet, Method: http.MethodGet,
Path: "/api/fetch/groups", Path: "/api/fetch/groups",
Handler: func(c echo.Context) error { 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{ Middlewares: []echo.MiddlewareFunc{
apis.ActivityLogger(app), apis.ActivityLogger(app),

View File

@@ -8,6 +8,8 @@ import (
"htwkalender/model" "htwkalender/model"
"htwkalender/service/db" "htwkalender/service/db"
"htwkalender/service/functions" "htwkalender/service/functions"
"io"
"log/slog"
"net/http" "net/http"
"regexp" "regexp"
"strconv" "strconv"
@@ -21,9 +23,14 @@ import (
// FetchAndUpdateSportEvents fetches all sport events from the HTWK sport website // FetchAndUpdateSportEvents fetches all sport events from the HTWK sport website
// it deletes them first and then saves them to the database // it deletes them first and then saves them to the database
// It returns all saved events // 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) sportEntries := fetchHTWKSportCourses(sportCourseLinks)
events := formatEntriesToEvents(sportEntries) 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 // get all events from database where name = Feiertage und lehrveranstaltungsfreie Tage
holidays, err := db.GetAllModulesByNameAndDateRange(app, "Feiertage und lehrveranstaltungsfreie Tage", earliestDate, latestDate) holidays, err := db.GetAllModulesByNameAndDateRange(app, "Feiertage und lehrveranstaltungsfreie Tage", earliestDate, latestDate)
if err != nil { if err != nil {
return nil return nil, err
} }
// remove all events that have same year, month and day as items in holidays // 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 // @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()) err = db.DeleteAllEventsForCourse(app, "Sport", functions.GetCurrentSemesterString())
if err != nil { if err != nil {
return nil return nil, err
} }
// save events to database // save events to database
savedEvents, err := db.SaveEvents(events, app) savedEvents, err := db.SaveEvents(events, app)
if err != nil { 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 // 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 url = "https://sport.htwk-leipzig.de/sportangebote"
var doc, err = htmlRequest(url) var doc, err = htmlRequest(url)
if err != nil { if err != nil {
return nil slog.Error("Error while fetching sport courses from webpage", err)
return nil, err
} }
// link list of all sport courses // 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. // fetchAllHTWKSportCourses fetches all sport courses from the given links.
@@ -372,7 +380,13 @@ func htmlRequest(url string) (*goquery.Document, error) {
if err != nil { if err != nil {
return nil, err 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) doc, err := goquery.NewDocumentFromReader(resp.Body)
if err != nil { if err != nil {

View File

@@ -3,13 +3,12 @@ package v1
import ( import (
"encoding/xml" "encoding/xml"
"fmt" "fmt"
"github.com/labstack/echo/v5"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/models"
"htwkalender/model" "htwkalender/model"
"htwkalender/service/db" "htwkalender/service/db"
"io" "io"
"log/slog"
"net/http" "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 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") resultWinter, _ := getSeminarHTML("ws")
if err != nil {
slog.Error("Error while fetching seminar groups for summer semester", err)
return nil, err
}
groups = parseSeminarGroups(resultSummer) groups = parseSeminarGroups(resultSummer)
groups = append(groups, parseSeminarGroups(resultWinter)...) groups = append(groups, parseSeminarGroups(resultWinter)...)
@@ -55,16 +65,18 @@ func SeminarGroups(c echo.Context, app *pocketbase.PocketBase) error {
collection, dbError := db.FindCollection(app, "groups") collection, dbError := db.FindCollection(app, "groups")
if dbError != nil { 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 var insertedGroups []*models.Record
insertedGroups, dbError = db.SaveGroups(groups, collection, app) insertedGroups, dbError = db.SaveGroups(groups, collection, app)
if dbError != nil { 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 { func removeDuplicates(groups []model.SeminarGroup) []model.SeminarGroup {

View File

@@ -1 +0,0 @@
package logger