From 090342736d6eedc607ce3778bdb65dc4076e6b78 Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Fri, 27 Oct 2023 00:03:14 +0200 Subject: [PATCH] fix:#28 fixed info panel and edited backend api for fix --- backend/service/addRoute.go | 16 +++++++++++----- backend/service/db/dbEvents.go | 4 ++-- backend/service/events/eventService.go | 6 +++--- frontend/src/api/fetchModule.ts | 6 +++--- frontend/src/components/AdditionalModules.vue | 11 +++++------ .../editCalendar/EditAdditionalModules.vue | 7 +++---- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/backend/service/addRoute.go b/backend/service/addRoute.go index 795d91d..ec62d89 100644 --- a/backend/service/addRoute.go +++ b/backend/service/addRoute.go @@ -5,13 +5,13 @@ import ( "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" + "htwkalender/model" "htwkalender/service/events" "htwkalender/service/fetch" "htwkalender/service/ical" "htwkalender/service/room" "io" "net/http" - "net/url" ) func AddRoutes(app *pocketbase.PocketBase) { @@ -191,12 +191,17 @@ func AddRoutes(app *pocketbase.PocketBase) { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { _, err := e.Router.AddRoute(echo.Route{ - Method: http.MethodGet, + Method: http.MethodPost, Path: "/api/module", Handler: func(c echo.Context) error { - name := c.Request().Header.Get("Name") - name, err := url.QueryUnescape(name) - module, err := events.GetModuleByName(app, name) + + var requestModule model.Module + + if err := c.Bind(&requestModule); err != nil { + return apis.NewBadRequestError("Failed to read request body", err) + } + + module, err := events.GetModuleByName(app, requestModule) if err != nil { return c.JSON(400, err) @@ -271,6 +276,7 @@ func AddRoutes(app *pocketbase.PocketBase) { }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), + apis.RequireAdminAuth(), }, }) if err != nil { diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index ee6f1d5..5358051 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -190,10 +190,10 @@ func DeleteAllEvents(app *pocketbase.PocketBase) error { return nil } -func FindAllEventsByModule(app *pocketbase.PocketBase, moduleName string) (model.Events, error) { +func FindAllEventsByModule(app *pocketbase.PocketBase, module model.Module) (model.Events, error) { var events model.Events - err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Name = {:moduleName}", dbx.Params{"moduleName": moduleName})).All(&events) + err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Name = {:moduleName} AND course = {:course}", dbx.Params{"moduleName": module.Name, "course": module.Course})).All(&events) if err != nil { print("Error while getting events from database: ", err) return nil, err diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index e114bff..4b646da 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -46,15 +46,15 @@ func GetAllModulesDistinct(app *pocketbase.PocketBase, c echo.Context) error { // If the module does not exist, an error is returned // If the module exists, the module is returned // Module is a struct that exists in database as events -func GetModuleByName(app *pocketbase.PocketBase, name string) (model.Module, error) { - events, err := db.FindAllEventsByModule(app, name) +func GetModuleByName(app *pocketbase.PocketBase, module model.Module) (model.Module, error) { + events, err := db.FindAllEventsByModule(app, module) if err != nil || len(events) == 0 { return model.Module{}, err } else { return model.Module{ UUID: events[0].UUID, - Name: name, + Name: events[0].Name, Events: events, Prof: events[0].Prof, Course: events[0].Course, diff --git a/frontend/src/api/fetchModule.ts b/frontend/src/api/fetchModule.ts index a6b2d86..e6a7f1c 100644 --- a/frontend/src/api/fetchModule.ts +++ b/frontend/src/api/fetchModule.ts @@ -1,12 +1,12 @@ import { Module } from "../model/module"; -export async function fetchModule(name: string): Promise { +export async function fetchModule(module: Module): Promise { const request = new Request("/api/module", { - method: "GET", + method: "POST", headers: { "Content-Type": "application/json", - Name: encodeURI(name), }, + body: JSON.stringify(module), }); return await fetch(request) diff --git a/frontend/src/components/AdditionalModules.vue b/frontend/src/components/AdditionalModules.vue index c989cb1..868fdf4 100644 --- a/frontend/src/components/AdditionalModules.vue +++ b/frontend/src/components/AdditionalModules.vue @@ -38,10 +38,9 @@ const ModuleInformation = defineAsyncComponent( () => import("./ModuleInformation.vue"), ); -async function showInfo(moduleName: string) { - const module: Ref = ref(new Module("", "", "", "", "", "", [])); - await fetchModule(moduleName).then((data) => { - module.value = data; +async function showInfo(module: Module) { + await fetchModule(module).then((data) => { + module = data; }); dialog.open(ModuleInformation, { props: { @@ -66,7 +65,7 @@ const selectAll = ref(false); const onSelectAllChange = (event: MultiSelectAllChangeEvent) => { selectedModules.value = event.checked - ? modules.value.map((module) => module) + ? modules.value.map((module: Module) => module) : []; selectAll.value = event.checked; }; @@ -112,7 +111,7 @@ function selectChange() { rounded outlined aria-label="Information" - @click.stop="showInfo(slotProps.option.name)" + @click.stop="showInfo(slotProps.option)" > diff --git a/frontend/src/components/editCalendar/EditAdditionalModules.vue b/frontend/src/components/editCalendar/EditAdditionalModules.vue index b19f63e..5b07d39 100644 --- a/frontend/src/components/editCalendar/EditAdditionalModules.vue +++ b/frontend/src/components/editCalendar/EditAdditionalModules.vue @@ -36,9 +36,8 @@ const ModuleInformation = defineAsyncComponent( () => import("../ModuleInformation.vue"), ); -async function showInfo(moduleName: string) { - const module: Ref = ref(new Module("", "", "", "", "", "", [])); - await fetchModule(moduleName).then((data) => { +async function showInfo(module: Module) { + await fetchModule(module).then((data) => { module.value = data; }); dialog.open(ModuleInformation, { @@ -110,7 +109,7 @@ function selectChange() { rounded outlined aria-label="Information" - @click.stop="showInfo(slotProps.option.name)" + @click.stop="showInfo(slotProps.option)" >