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 1/6] 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 +} 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 2/6] 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, From 9513fc06d0b1153b4add4abcbada11389d994d2e Mon Sep 17 00:00:00 2001 From: masterelmar <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:20:10 +0200 Subject: [PATCH 3/6] fix:#16 fixed empty module construction --- frontend/src/components/AdditionalModules.vue | 2 +- frontend/src/components/editCalendar/EditAdditionalModules.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/AdditionalModules.vue b/frontend/src/components/AdditionalModules.vue index 7074611..c989cb1 100644 --- a/frontend/src/components/AdditionalModules.vue +++ b/frontend/src/components/AdditionalModules.vue @@ -39,7 +39,7 @@ const ModuleInformation = defineAsyncComponent( ); async function showInfo(moduleName: string) { - const module: Ref = ref(new Module("", "", "", "", "", [])); + const module: Ref = ref(new Module("", "", "", "", "", "", [])); await fetchModule(moduleName).then((data) => { module.value = data; }); diff --git a/frontend/src/components/editCalendar/EditAdditionalModules.vue b/frontend/src/components/editCalendar/EditAdditionalModules.vue index 9f696e8..b19f63e 100644 --- a/frontend/src/components/editCalendar/EditAdditionalModules.vue +++ b/frontend/src/components/editCalendar/EditAdditionalModules.vue @@ -37,7 +37,7 @@ const ModuleInformation = defineAsyncComponent( ); async function showInfo(moduleName: string) { - const module: Ref = ref(new Module("", "", "", "", "", [])); + const module: Ref = ref(new Module("", "", "", "", "", "", [])); await fetchModule(moduleName).then((data) => { module.value = data; }); From 1e3e48422d682257afc33943f8df4fdfd626d563 Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:39:22 +0200 Subject: [PATCH 4/6] fix:#16 fixed database search for module in migration --- backend/service/ical/icalJsonMigrate.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/service/ical/icalJsonMigrate.go b/backend/service/ical/icalJsonMigrate.go index 17afdbf..94ac33d 100644 --- a/backend/service/ical/icalJsonMigrate.go +++ b/backend/service/ical/icalJsonMigrate.go @@ -30,7 +30,7 @@ func MigrateFeedJson(app *pocketbase.PocketBase) error { var uuidFeedCollections []model.FeedCollection for _, module := range modules { - uuid := searchUUIDForModule(app, module.Name) + uuid := searchUUIDForModule(app, module) if uuid != "" { uuidFeedCollections = append(uuidFeedCollections, model.FeedCollection{UUID: uuid, Name: module.Name, Course: module.Course, UserDefinedName: module.UserDefinedName}) @@ -48,9 +48,9 @@ func MigrateFeedJson(app *pocketbase.PocketBase) error { return nil } -func searchUUIDForModule(app *pocketbase.PocketBase, moduleName string) string { +func searchUUIDForModule(app *pocketbase.PocketBase, module model.FeedCollection) string { var event model.Event - err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Name = {:name}", dbx.Params{"name": moduleName})).One(&event) + err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Name = {:name} AND course = {:course}", dbx.Params{"name": module.Name, "course": module.Course})).One(&event) if err != nil { return "" } From caa94154225a02ae15cbe3fc45cb42a84ccba698 Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:51:25 +0200 Subject: [PATCH 5/6] fix:#16 added delete option and fixed uuid generation --- backend/service/addRoute.go | 18 ++++++ backend/service/db/dbEvents.go | 11 ++++ backend/service/events/eventService.go | 9 +++ .../service/fetch/fetchSeminarEventService.go | 9 +-- .../fetch/fetchSeminarEventService_test.go | 64 +++++++++++++++++++ 5 files changed, 107 insertions(+), 4 deletions(-) diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index a767ee0..795d91d 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -33,6 +33,24 @@ func AddRoutes(app *pocketbase.PocketBase) { return nil }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + _, err := e.Router.AddRoute(echo.Route{ + Method: http.MethodDelete, + Path: "/api/modules", + Handler: func(c echo.Context) error { + return events.DeleteAllEvents(app) + }, + Middlewares: []echo.MiddlewareFunc{ + apis.ActivityLogger(app), + apis.RequireAdminAuth(), + }, + }) + if err != nil { + return err + } + return nil + }) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ Method: http.MethodGet, diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index 884d7bb..ee6f1d5 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -179,6 +179,17 @@ func DeleteAllEventsForCourse(app *pocketbase.PocketBase, course string, semeste return nil } +func DeleteAllEvents(app *pocketbase.PocketBase) error { + + _, err := app.Dao().DB().Delete("events", dbx.NewExp("1=1")).Execute() + + if err != nil { + return err + } + + return nil +} + func FindAllEventsByModule(app *pocketbase.PocketBase, moduleName string) (model.Events, error) { var events model.Events diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index 52128a0..e114bff 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -75,6 +75,15 @@ func DeleteAllEventsByCourseAndSemester(app *pocketbase.PocketBase, course strin } } +func DeleteAllEvents(app *pocketbase.PocketBase) error { + err := db.DeleteAllEvents(app) + if err != nil { + return err + } else { + return nil + } +} + // UpdateModulesForCourse updates all modules for a course // Does Updates for ws and ss semester sequentially // Update runs through the following steps: diff --git a/backend/service/fetch/fetchSeminarEventService.go b/backend/service/fetch/fetchSeminarEventService.go index da2dafb..183b1aa 100644 --- a/backend/service/fetch/fetchSeminarEventService.go +++ b/backend/service/fetch/fetchSeminarEventService.go @@ -96,21 +96,22 @@ func parseSeminarGroup(result string) model.SeminarGroup { splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks) events := splitEventsBySingleWeek(splitEventsByWeekVal) semesterString := findFirstSpanWithClass(table, "header-0-2-0").FirstChild.Data + course := findFirstSpanWithClass(table, "header-2-0-1").FirstChild.Data semester, year := extractSemesterAndYear(semesterString) events = convertWeeksToDates(events, semester, year) - events = generateUUIDs(events) + events = generateUUIDs(events, course) var seminarGroup = model.SeminarGroup{ University: findFirstSpanWithClass(table, "header-1-0-0").FirstChild.Data, - Course: findFirstSpanWithClass(table, "header-2-0-1").FirstChild.Data, + Course: course, Events: events, } return seminarGroup } -func generateUUIDs(events []model.Event) []model.Event { +func generateUUIDs(events []model.Event, course string) []model.Event { for i, event := range events { // generate a hash value from the event name, course and semester - hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+event.Course+event.Semester)) + hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+course)) events[i].UUID = hash.String() } return events diff --git a/backend/service/fetch/fetchSeminarEventService_test.go b/backend/service/fetch/fetchSeminarEventService_test.go index 3284402..f1fce7e 100644 --- a/backend/service/fetch/fetchSeminarEventService_test.go +++ b/backend/service/fetch/fetchSeminarEventService_test.go @@ -118,3 +118,67 @@ func Test_replaceEmptyEventNames(t *testing.T) { }) } } + +func Test_generateUUIDs(t *testing.T) { + type args struct { + events []model.Event + } + tests := []struct { + name string + args args + want []model.Event + }{ + { + name: "Test 1", + args: args{ + events: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + }, + }, + }, + want: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + }, + }, + }, + { + name: "Test 2", + args: args{ + events: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-3a", + }, + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + }, + }, + }, + want: []model.Event{ + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-3a", + UUID: "9f90d86b-a948-53b9-bbbc-5163acc1cf33", + }, + { + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + Course: "21BIB-2b", + UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := generateUUIDs(tt.args.events); !reflect.DeepEqual(got, tt.want) { + t.Errorf("generateUUIDs() = %v, want %v", got, tt.want) + } + }) + } +} From 97722ba7d26a2a2b5fd0326ad427b8b4ff6bcd45 Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:54:51 +0200 Subject: [PATCH 6/6] fix:#16 fixed uuid test --- .../fetch/fetchSeminarEventService_test.go | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/backend/service/fetch/fetchSeminarEventService_test.go b/backend/service/fetch/fetchSeminarEventService_test.go index f1fce7e..111f0b8 100644 --- a/backend/service/fetch/fetchSeminarEventService_test.go +++ b/backend/service/fetch/fetchSeminarEventService_test.go @@ -122,6 +122,7 @@ func Test_replaceEmptyEventNames(t *testing.T) { func Test_generateUUIDs(t *testing.T) { type args struct { events []model.Event + course string } tests := []struct { name string @@ -133,16 +134,15 @@ func Test_generateUUIDs(t *testing.T) { args: args{ events: []model.Event{ { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-2b", + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", }, }, + course: "21BIB-2a", }, want: []model.Event{ { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-2b", - UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + UUID: "3720afdc-10c7-5b72-9489-cffb70cb0c13", }, }, }, @@ -151,32 +151,22 @@ func Test_generateUUIDs(t *testing.T) { args: args{ events: []model.Event{ { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-3a", - }, - { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-2b", + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", }, }, + course: "21BIB-2b", }, want: []model.Event{ { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-3a", - UUID: "9f90d86b-a948-53b9-bbbc-5163acc1cf33", - }, - { - Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", - Course: "21BIB-2b", - UUID: "81083480-bcf1-5452-af84-bb27d79282d8", + Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS", + UUID: "81083480-bcf1-5452-af84-bb27d79282d8", }, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := generateUUIDs(tt.args.events); !reflect.DeepEqual(got, tt.want) { + if got := generateUUIDs(tt.args.events, tt.args.course); !reflect.DeepEqual(got, tt.want) { t.Errorf("generateUUIDs() = %v, want %v", got, tt.want) } })