From 3cd9f1fdbd9b30a5ed55e426c8b51ffe9be0ce7d Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:00:59 +0200 Subject: [PATCH] feat:#16 added migration for feeds with uuid --- backend/Dockerfile | 2 +- backend/model/icalModel.go | 7 ++++ backend/service/addRoute.go | 18 +++++++++ backend/service/ical/icalJsonMigrate.go | 54 +++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 backend/service/ical/icalJsonMigrate.go diff --git a/backend/Dockerfile b/backend/Dockerfile index 77f2aca..67a9d42 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20.5-alpine +FROM golang:1.21.3-alpine # Set the Current Working Directory inside the container WORKDIR /app diff --git a/backend/model/icalModel.go b/backend/model/icalModel.go index 192a528..c8ae765 100644 --- a/backend/model/icalModel.go +++ b/backend/model/icalModel.go @@ -27,3 +27,10 @@ type FeedCollection struct { Course string `db:"course" json:"course"` UserDefinedName string `db:"userDefinedName" json:"userDefinedName"` } + +type UUIDFeedCollection struct { + UUID string `db:"uuid" json:"uuid"` + Name string `db:"Name" json:"name"` + Course string `db:"course" json:"course"` + UserDefinedName string `db:"userDefinedName" json:"userDefinedName"` +} diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index d5066bf..5a7ad49 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -243,4 +243,22 @@ 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/feed/migrate", + Handler: func(c echo.Context) error { + ical.MigrateFeedJson(app) + return c.JSON(200, "Migrated") + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + }, + }) + if err != nil { + return err + } + return nil + }) } diff --git a/backend/service/ical/icalJsonMigrate.go b/backend/service/ical/icalJsonMigrate.go new file mode 100644 index 0000000..19f38b4 --- /dev/null +++ b/backend/service/ical/icalJsonMigrate.go @@ -0,0 +1,54 @@ +package ical + +import ( + "encoding/json" + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase" + "htwkalender/model" +) + +//update ical feed json +//add uuid field +//remove module name field + +func MigrateFeedJson(app *pocketbase.PocketBase) { + + var feeds []model.Feed + + err := app.Dao().DB().Select("*").From("feed").All(&feeds) + if err != nil { + return + } + + for _, feed := range feeds { + + var modules []model.FeedCollection + + err := json.Unmarshal([]byte(feed.Modules), &modules) + if err != nil { + return + } + + var uuidFeedCollection model.UUIDFeedCollection + + for _, module := range modules { + uuid := searchUUIDForModule(app, module.Name) + + if uuid != "" { + uuidFeedCollection = model.UUIDFeedCollection{UUID: uuid, Name: module.Name, Course: module.Course, UserDefinedName: module.UserDefinedName} + app.Dao().DB().Update("feed", dbx.Params{"modules": uuidFeedCollection}, dbx.NewExp("id = {:id}", dbx.Params{"id": feed.Id})) + } + } + + } + +} + +func searchUUIDForModule(app *pocketbase.PocketBase, module string) string { + var uuid string + err := app.Dao().DB().Select("uuid").From("module").Where(dbx.NewExp("name = {:name}", dbx.Params{"name": module})).One(&uuid) + if err != nil { + return "" + } + return uuid +}