From 5c438424a292957b6c5afb584c1b76af736af471 Mon Sep 17 00:00:00 2001 From: masterelmar <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 16:54:48 +0200 Subject: [PATCH] feat:#16 added uuid for all modules in back-/frontend --- .vscode/launch.json | 27 ++++ backend/model/feedModel.go | 11 +- backend/model/icalModel.go | 6 - backend/model/moduleModel.go | 1 + backend/pb_schema.json | 168 ------------------------ backend/service/addRoute.go | 15 +-- backend/service/events/eventService.go | 1 + backend/service/ical/ical.go | 6 +- backend/service/ical/icalJsonMigrate.go | 36 ++--- frontend/src/api/fetchCourse.ts | 2 + frontend/src/api/fetchModule.ts | 1 + frontend/src/model/module.ts | 1 + 12 files changed, 70 insertions(+), 205 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..547f3f9 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch file", + "type": "go", + "request": "launch", + "mode": "debug", + "program": "backend/main.go", + "args": ["serve"], + "showLog": true + }, + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "backend", + "env": {}, + "args": ["serve"], + "showLog": true + } + ] +} diff --git a/backend/model/feedModel.go b/backend/model/feedModel.go index 0f2cb35..e3920a2 100644 --- a/backend/model/feedModel.go +++ b/backend/model/feedModel.go @@ -1,8 +1,13 @@ package model +import "github.com/pocketbase/pocketbase/models" + type Feed struct { - Id string `db:"id" json:"id"` Modules string `db:"modules" json:"modules"` - Created string `db:"created" json:"created"` - Updated string `db:"updated" json:"updated"` + models.BaseModel +} + +// SetModules set modules field +func (f *Feed) SetModules(modules string) { + f.Modules = modules } diff --git a/backend/model/icalModel.go b/backend/model/icalModel.go index c8ae765..2060712 100644 --- a/backend/model/icalModel.go +++ b/backend/model/icalModel.go @@ -23,12 +23,6 @@ type Entry struct { type Entries []*Entry type FeedCollection struct { - Name string `db:"Name" json:"name"` - 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"` diff --git a/backend/model/moduleModel.go b/backend/model/moduleModel.go index ab0d17f..422613d 100644 --- a/backend/model/moduleModel.go +++ b/backend/model/moduleModel.go @@ -1,6 +1,7 @@ package model type Module struct { + UUID string `json:"uuid"` Name string `json:"name"` Prof string `json:"prof"` Course string `json:"course"` diff --git a/backend/pb_schema.json b/backend/pb_schema.json index d3536f9..2054fd0 100644 --- a/backend/pb_schema.json +++ b/backend/pb_schema.json @@ -1,172 +1,4 @@ [ - { - "id": "_pb_users_auth_", - "name": "users", - "type": "auth", - "system": false, - "schema": [ - { - "id": "users_name", - "name": "name", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "users_avatar", - "name": "avatar", - "type": "file", - "system": false, - "required": false, - "options": { - "maxSelect": 1, - "maxSize": 5242880, - "mimeTypes": [ - "image/jpeg", - "image/png", - "image/svg+xml", - "image/gif", - "image/webp" - ], - "thumbs": null, - "protected": false - } - } - ], - "indexes": [], - "listRule": "id = @request.auth.id", - "viewRule": "id = @request.auth.id", - "createRule": "", - "updateRule": "id = @request.auth.id", - "deleteRule": "id = @request.auth.id", - "options": { - "allowEmailAuth": true, - "allowOAuth2Auth": true, - "allowUsernameAuth": true, - "exceptEmailDomains": null, - "manageRule": null, - "minPasswordLength": 8, - "onlyEmailDomains": null, - "requireEmail": false - } - }, - { - "id": "cfq9mqlmd97v8z5", - "name": "groups", - "type": "base", - "system": false, - "schema": [ - { - "id": "85msl21p", - "name": "university", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "2sii4dtp", - "name": "shortcut", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "uiwgo28f", - "name": "groupId", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "y0l1lrzs", - "name": "course", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "kr62mhbz", - "name": "faculty", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - }, - { - "id": "ya6znpez", - "name": "facultyId", - "type": "text", - "system": false, - "required": false, - "options": { - "min": null, - "max": null, - "pattern": "" - } - } - ], - "indexes": [ - "CREATE UNIQUE INDEX `idx_rcaN2Oq` ON `groups` (`course`)" - ], - "listRule": null, - "viewRule": null, - "createRule": null, - "updateRule": null, - "deleteRule": null, - "options": {} - }, - { - "id": "d65h4wh7zk13gxp", - "name": "feeds", - "type": "base", - "system": false, - "schema": [ - { - "id": "cowxjfmc", - "name": "modules", - "type": "json", - "system": false, - "required": true, - "options": {} - } - ], - "indexes": [], - "listRule": null, - "viewRule": null, - "createRule": null, - "updateRule": null, - "deleteRule": null, - "options": {} - }, { "id": "7her4515qsmrxe8", "name": "events", diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index 5a7ad49..a767ee0 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -12,16 +12,10 @@ import ( "io" "net/http" "net/url" - "os" ) func AddRoutes(app *pocketbase.PocketBase) { - app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("/*", apis.StaticDirectoryHandler(os.DirFS("./pb_public"), false)) - return nil - }) - app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, @@ -249,8 +243,13 @@ func AddRoutes(app *pocketbase.PocketBase) { Method: http.MethodGet, Path: "/api/feed/migrate", Handler: func(c echo.Context) error { - ical.MigrateFeedJson(app) - return c.JSON(200, "Migrated") + err := ical.MigrateFeedJson(app) + + if err != nil { + return c.JSON(500, err) + } else { + return c.JSON(200, "Migrated") + } }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index 5f589fe..52128a0 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -53,6 +53,7 @@ func GetModuleByName(app *pocketbase.PocketBase, name string) (model.Module, err return model.Module{}, err } else { return model.Module{ + UUID: events[0].UUID, Name: name, Events: events, Prof: events[0].Prof, diff --git a/backend/service/ical/ical.go b/backend/service/ical/ical.go index a0ad8d4..6ff6372 100644 --- a/backend/service/ical/ical.go +++ b/backend/service/ical/ical.go @@ -16,8 +16,6 @@ import ( const expirationTime = 5 * time.Minute func Feed(c echo.Context, app *pocketbase.PocketBase, token string) error { - layout := "2006-01-02 15:04:05 -0700 MST" - var result string var responseWriter = c.Response().Writer feed, err := db.FindFeedByToken(token, app) @@ -25,11 +23,11 @@ func Feed(c echo.Context, app *pocketbase.PocketBase, token string) error { return c.JSON(http.StatusNotFound, err) } - created, _ := time.Parse(layout, feed.Created) + created := feed.Created var modules []model.FeedCollection _ = json.Unmarshal([]byte(feed.Modules), &modules) - if created.Add(time.Hour * 265).Before(time.Now()) { + if created.Time().Add(time.Hour * 265).Before(time.Now()) { newFeed, err := createFeedForToken(app, modules) if err != nil { return c.JSON(http.StatusInternalServerError, err) diff --git a/backend/service/ical/icalJsonMigrate.go b/backend/service/ical/icalJsonMigrate.go index 19f38b4..17afdbf 100644 --- a/backend/service/ical/icalJsonMigrate.go +++ b/backend/service/ical/icalJsonMigrate.go @@ -11,44 +11,48 @@ import ( //add uuid field //remove module name field -func MigrateFeedJson(app *pocketbase.PocketBase) { +func MigrateFeedJson(app *pocketbase.PocketBase) error { - var feeds []model.Feed - - err := app.Dao().DB().Select("*").From("feed").All(&feeds) + records, err := app.Dao().FindRecordsByFilter("feeds", "1=1", "-created", 0, 0) if err != nil { - return + return err } - for _, feed := range feeds { + for _, feed := range records { var modules []model.FeedCollection - err := json.Unmarshal([]byte(feed.Modules), &modules) + err := json.Unmarshal([]byte(feed.GetString("modules")), &modules) if err != nil { - return + return err } - var uuidFeedCollection model.UUIDFeedCollection + var uuidFeedCollections []model.FeedCollection 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})) + uuidFeedCollections = append(uuidFeedCollections, model.FeedCollection{UUID: uuid, Name: module.Name, Course: module.Course, UserDefinedName: module.UserDefinedName}) } } - } + jsonModules, _ := json.Marshal(uuidFeedCollections) + feed.Set("modules", string(jsonModules)) + err = app.Dao().SaveRecord(feed) + if err != nil { + return err + } + } + return nil } -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) +func searchUUIDForModule(app *pocketbase.PocketBase, moduleName string) string { + var event model.Event + err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Name = {:name}", dbx.Params{"name": moduleName})).One(&event) if err != nil { return "" } - return uuid + return event.UUID } diff --git a/frontend/src/api/fetchCourse.ts b/frontend/src/api/fetchCourse.ts index 3f23516..b641635 100644 --- a/frontend/src/api/fetchCourse.ts +++ b/frontend/src/api/fetchCourse.ts @@ -27,6 +27,7 @@ export async function fetchModulesByCourseAndSemester( modulesResponse.forEach((module: Module) => modules.push( new Module( + module.uuid, module.name, course, module.name, @@ -50,6 +51,7 @@ export async function fetchAllModules(): Promise { responseModules.forEach((module: Module) => { modules.push( new Module( + module.uuid, module.name, module.course, module.name, diff --git a/frontend/src/api/fetchModule.ts b/frontend/src/api/fetchModule.ts index 17a7ec9..a6b2d86 100644 --- a/frontend/src/api/fetchModule.ts +++ b/frontend/src/api/fetchModule.ts @@ -16,6 +16,7 @@ export async function fetchModule(name: string): Promise { .then( (module: Module) => new Module( + module.uuid, module.name, module.course, module.name, diff --git a/frontend/src/model/module.ts b/frontend/src/model/module.ts index 8be7e35..9633c9d 100644 --- a/frontend/src/model/module.ts +++ b/frontend/src/model/module.ts @@ -2,6 +2,7 @@ import { Event } from "./event"; export class Module { constructor( + public uuid: string, public name: string, public course: string, public userDefinedName: string,