diff --git a/addRoute.go b/addRoute.go index f623702..e45bf7e 100644 --- a/addRoute.go +++ b/addRoute.go @@ -5,9 +5,9 @@ import ( "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" - "htwk-planner/service" "htwk-planner/service/fetch" "htwk-planner/service/ical" + "htwk-planner/service/room" "net/http" "os" ) @@ -58,7 +58,7 @@ func addRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/rooms", Handler: func(c echo.Context) error { - return service.GetRooms(c, app) + return room.GetRooms(c, app) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), @@ -75,7 +75,9 @@ func addRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/feedURL", Handler: func(c echo.Context) error { - return ical.FeedURL(c, app) + course := c.Request().Header.Get("course") + semester := c.Request().Header.Get("semester") + return ical.FeedURL(c, app, course, semester) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), @@ -92,7 +94,8 @@ func addRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/feed", Handler: func(c echo.Context) error { - return ical.Feed(c, app) + token := c.QueryParam("token") + return ical.Feed(c, app, token) }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), diff --git a/service/ical/icalModel.go b/model/icalModel.go similarity index 83% rename from service/ical/icalModel.go rename to model/icalModel.go index a44983c..d66a695 100644 --- a/service/ical/icalModel.go +++ b/model/icalModel.go @@ -1,7 +1,6 @@ -package ical +package model import ( - "htwk-planner/model" "time" ) @@ -9,6 +8,8 @@ import ( type FeedModel struct { Content string ExpiresAt time.Time + Semester string + Course string } // Entry is a time entry @@ -21,4 +22,4 @@ type Entry struct { // Entries is a collection of entries type Entries []*Entry -type Events []*model.Event +type Events []*Event diff --git a/service/db/dbEvents.go b/service/db/dbEvents.go index c32bb67..4ff4e99 100644 --- a/service/db/dbEvents.go +++ b/service/db/dbEvents.go @@ -102,6 +102,7 @@ func (e Events) EmitICal() goics.Componenter { } // GetPlanForCourseAndSemester gets all events for specific course and semester +// TODO add filter for year func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) Events { var events Events // get all events from event records in the events collection diff --git a/service/ical/ical.go b/service/ical/ical.go index eaa6f26..1b31f1c 100644 --- a/service/ical/ical.go +++ b/service/ical/ical.go @@ -7,31 +7,29 @@ import ( "github.com/jordic/goics" "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" + "htwk-planner/model" "htwk-planner/service/db" - "log" "net/http" "time" ) const expirationTime = 5 * time.Minute -var cache = make(map[string]*FeedModel) +var cache = make(map[string]*model.FeedModel) -func FeedURL(c echo.Context, app *pocketbase.PocketBase) error { +func FeedURL(c echo.Context, app *pocketbase.PocketBase, course string, semester string) error { token := randomToken(20) - _, err := createFeedForToken(app, token) + _, err := createFeedForToken(app, token, course, semester) if err != nil { return err } return c.JSON(http.StatusOK, fmt.Sprintf("FeedToken: %s", token)) } -func Feed(c echo.Context, app *pocketbase.PocketBase) error { +func Feed(c echo.Context, app *pocketbase.PocketBase, token string) error { var result string var responseWriter = c.Response().Writer - token := c.QueryParam("token") - log.Print("iCal feed Token: " + token) feed, ok := cache[token] if !ok || feed == nil { return c.JSON(http.StatusNotFound, "No FeedModel for this Token") @@ -39,7 +37,7 @@ func Feed(c echo.Context, app *pocketbase.PocketBase) error { result = feed.Content if feed.ExpiresAt.Before(time.Now()) { - newFeed, err := createFeedForToken(app, token) + newFeed, err := createFeedForToken(app, token, feed.Course, feed.Semester) if err != nil { return c.JSON(http.StatusInternalServerError, err) } @@ -55,11 +53,11 @@ func Feed(c echo.Context, app *pocketbase.PocketBase) error { return nil } -func createFeedForToken(app *pocketbase.PocketBase, token string) (*FeedModel, error) { - res := db.GetPlanForCourseAndSemester(app, "22INM", "ws") +func createFeedForToken(app *pocketbase.PocketBase, token string, course string, semester string) (*model.FeedModel, error) { + res := db.GetPlanForCourseAndSemester(app, course, semester) b := bytes.Buffer{} goics.NewICalEncode(&b).Encode(res) - feed := &FeedModel{Content: b.String(), ExpiresAt: time.Now().Add(expirationTime)} + feed := &model.FeedModel{Content: b.String(), ExpiresAt: time.Now().Add(expirationTime)} cache[token] = feed return feed, nil } diff --git a/service/roomService.go b/service/room/roomService.go similarity index 94% rename from service/roomService.go rename to service/room/roomService.go index 96a330d..2cc622c 100644 --- a/service/roomService.go +++ b/service/room/roomService.go @@ -1,4 +1,4 @@ -package service +package room import ( "github.com/labstack/echo/v5"