From eeb84db0cc645a2bc7e787e7835409963b205d79 Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Sun, 10 Sep 2023 10:39:00 +0200 Subject: [PATCH] update for frontend --- addRoute.go | 40 +++++++++++++++++++++++++++++++-- service/db/dbEvents.go | 20 +++++++++++++++++ service/db/dbGroups.go | 6 ++--- service/events/courseService.go | 12 ++++++++++ service/events/eventService.go | 40 +++++++++++++++++++++++++++++++++ service/ical/ical.go | 2 +- 6 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 service/events/courseService.go create mode 100644 service/events/eventService.go diff --git a/addRoute.go b/addRoute.go index e45bf7e..620ae8b 100644 --- a/addRoute.go +++ b/addRoute.go @@ -5,6 +5,7 @@ import ( "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" + "htwk-planner/service/events" "htwk-planner/service/fetch" "htwk-planner/service/ical" "htwk-planner/service/room" @@ -75,8 +76,8 @@ func addRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/feedURL", Handler: func(c echo.Context) error { - course := c.Request().Header.Get("course") - semester := c.Request().Header.Get("semester") + course := c.QueryParam("course") + semester := c.QueryParam("semester") return ical.FeedURL(c, app, course, semester) }, Middlewares: []echo.MiddlewareFunc{ @@ -107,4 +108,39 @@ 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/modules", + Handler: func(c echo.Context) error { + course := c.QueryParam("course") + semester := c.QueryParam("semester") + return events.GetModulesForCourseDistinct(app, c, course, semester) + }, + 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) + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + }, + }) + if err != nil { + return err + } + return nil + }) } diff --git a/service/db/dbEvents.go b/service/db/dbEvents.go index 4ff4e99..037d653 100644 --- a/service/db/dbEvents.go +++ b/service/db/dbEvents.go @@ -113,3 +113,23 @@ func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, seme } return events } + +func GetAllModulesForCourse(app *pocketbase.PocketBase, course string, semester string) ([]string, error) { + var events []struct { + Name string `db:"Name" json:"Name"` + } + + var eventArray []string + + // get all events from event records in the events collection + err := app.Dao().DB().Select("Name").From("events").Where(dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).Distinct(true).All(&events) + if err != nil { + print("Error while getting events from database: ", err) + return eventArray, err + } + + for _, event := range events { + eventArray = append(eventArray, event.Name) + } + return eventArray, nil +} diff --git a/service/db/dbGroups.go b/service/db/dbGroups.go index fa2363c..4f83c59 100644 --- a/service/db/dbGroups.go +++ b/service/db/dbGroups.go @@ -25,7 +25,7 @@ func SaveGroups(seminarGroup []model.SeminarGroup, collection *models.Collection func GetAllCourses(app *pocketbase.PocketBase) []string { var courses []struct { - Rooms string `db:"course" json:"course"` + CourseShortcut string `db:"course" json:"course"` } // get all rooms from event records in the events collection @@ -37,8 +37,8 @@ func GetAllCourses(app *pocketbase.PocketBase) []string { var courseArray []string - for _, room := range courses { - courseArray = append(courseArray, room.Rooms) + for _, course := range courses { + courseArray = append(courseArray, course.CourseShortcut) } return courseArray diff --git a/service/events/courseService.go b/service/events/courseService.go new file mode 100644 index 0000000..00e849d --- /dev/null +++ b/service/events/courseService.go @@ -0,0 +1,12 @@ +package events + +import ( + "github.com/labstack/echo/v5" + "github.com/pocketbase/pocketbase" + "htwk-planner/service/db" +) + +func GetAllCourses(app *pocketbase.PocketBase, c echo.Context) error { + courses := db.GetAllCourses(app) + return c.JSON(200, courses) +} diff --git a/service/events/eventService.go b/service/events/eventService.go new file mode 100644 index 0000000..8b993f2 --- /dev/null +++ b/service/events/eventService.go @@ -0,0 +1,40 @@ +package events + +import ( + "github.com/labstack/echo/v5" + "github.com/pocketbase/pocketbase" + "htwk-planner/service/db" + "unicode" +) + +func GetModulesForCourseDistinct(app *pocketbase.PocketBase, c echo.Context, course string, semester string) error { + + modules, err := db.GetAllModulesForCourse(app, course, semester) + replaceEmptyEntry(modules, "Sonderveranstaltungen") + + if err != nil { + return c.JSON(400, err) + } else { + return c.JSON(200, modules) + } + +} + +func replaceEmptyEntry(courses []string, replacement string) { + //replace empty string with "Sonderveranstaltungen" + for i, course := range courses { + if checkIfOnlyWhitespace(course) { + courses[i] = replacement + } + } +} + +// check if course is empty or contains only whitespaces +func checkIfOnlyWhitespace(word string) bool { + for _, letter := range word { + if !unicode.IsSpace(letter) || !(letter == int32(160)) { + return false + } + } + return true +} diff --git a/service/ical/ical.go b/service/ical/ical.go index 1b31f1c..a5a39f1 100644 --- a/service/ical/ical.go +++ b/service/ical/ical.go @@ -23,7 +23,7 @@ func FeedURL(c echo.Context, app *pocketbase.PocketBase, course string, semester if err != nil { return err } - return c.JSON(http.StatusOK, fmt.Sprintf("FeedToken: %s", token)) + return c.JSON(http.StatusOK, fmt.Sprintf("FeedToken: %s, Course: %s, Semester: %s", token, course, semester)) } func Feed(c echo.Context, app *pocketbase.PocketBase, token string) error {