diff --git a/software/backend/data/exercises.json b/software/backend/data/exercises.json index 9acd493..530c915 100644 --- a/software/backend/data/exercises.json +++ b/software/backend/data/exercises.json @@ -33,7 +33,16 @@ "nameDe": "Broken Access Control", "nameEn": "Broken Access Control", "groupNr": 2, - "exercises": [] + "exercises": [ + { + "nameDe": "Admin-Panel aufrufen", + "nameEn": "Access Admin Panel", + "exerciseNr": 1, + "descriptionDe": "Manipuliere die URL so, dass du das Admin-Panel erreichen kannst", + "descriptionEn": "Manipulate the URL and access the admin panel", + "solved": false + } + ] }, { "nameDe": "Cross-Site Scripting (XSS)", diff --git a/software/src/data/enums/bannerStateEnum.ts b/software/src/data/enums/bannerStateEnum.ts index 1f26c8c..13d803d 100644 --- a/software/src/data/enums/bannerStateEnum.ts +++ b/software/src/data/enums/bannerStateEnum.ts @@ -9,6 +9,31 @@ export enum BannerStateEnum { BASKETPRODUCTREMOVED, + ////////// Exercise feedback ////////// + + EXERCISESOLVED01, + + EXERCISESOLVED02, + + EXERCISESOLVED11, + + EXERCISESOLVED12, + + EXERCISESOLVED13, + + EXERCISESOLVED21, + + EXERCISESOLVED22, + + EXERCISESOLVED23, + + EXERCISESOLVED31, + + EXERCISESOLVED32, + + EXERCISESOLVED33, + + ////////// API Endpoint /api ////////// // Status: 200 OK @@ -45,21 +70,6 @@ export enum BannerStateEnum { ACCOUNTLOGOUTSUCCESSFUL, - ////////// API Endpoint /categories ////////// - - // Status: 201 Created - CATEGORYCREATESUCCESSFUL, - - // Status: 200 OK - CATEGORYDELETESUCESSFUL, - - // Status: 400 Bad request - CATEGORYCREATEERROR, - - // Status: 400 Bad request - CATEGORYDELETEERROR, - - ////////// API Endpoint /orders ////////// // Status: 201 Created diff --git a/software/src/locales/de.json b/software/src/locales/de.json index c4ff84a..c55016a 100644 --- a/software/src/locales/de.json +++ b/software/src/locales/de.json @@ -49,22 +49,21 @@ "bankName": "Name der Bank", "iban": "IBAN" }, - "account": { - "username": "Username", - "password": "Passwort", - "noAccountRegister": "Neuen Account erstellen!", - "register": "Account erstellen", - "backToLogin": "Zurück zum Login", - "delete": "Account löschen", - "managingAccount": "Account verwalten", - "address": "Adresse | Addressen", - "payment": "Bezahlart | Bezahlarten", - "masterData": "Stammdaten", - "noAddresses": "Keine Adressen gefunden", - "noPayments": "Keine Bezahlarten gefunden", - "newPayment": "New Payment", - "email": "E-Mail-Adresse" - }, + "account": "Account | Accounts", + "username": "Username", + "password": "Passwort", + "noAccountRegister": "Neuen Account erstellen!", + "register": "Account erstellen", + "backToLogin": "Zurück zum Login", + "delete": "Account löschen", + "managingAccount": "Account verwalten", + "address": "Adresse | Addressen", + "payment": "Bezahlart | Bezahlarten", + "masterData": "Stammdaten", + "noAddresses": "Keine Adressen gefunden", + "noPayments": "Keine Bezahlarten gefunden", + "newPayment": "New Payment", + "email": "E-Mail-Adresse", "bannerMessages": { "loginSuccessful": "Login erfolgreich!", "wrongLogin": "Falscher Username oder falsches Passwort!", @@ -84,7 +83,18 @@ "productDeleteSuccessful": "Produkt erfolgreich entfernt", "productDeleteError": "Fehler beim Entfernen des Produktes", "basketProductAdded": "Artikel zum Warenkorb hinzugefügt", - "basketProductRemoved": "Artikel aus Warenkorb entfernt" + "basketProductRemoved": "Artikel aus Warenkorb entfernt", + "exerciseSolved01": "Aufgabe 0.1 gelöst!", + "exerciseSolved02": "Aufgabe 0.2 gelöst!", + "exerciseSolved11": "Aufgabe 1.1 gelöst!", + "exerciseSolved12": "Aufgabe 1.2 gelöst!", + "exerciseSolved13": "Aufgabe 1.3 gelöst!", + "exerciseSolved21": "Aufgabe 2.1 gelöst!", + "exerciseSolved22": "Aufgabe 2.2 gelöst!", + "exerciseSolved23": "Aufgabe 2.3 gelöst!", + "exerciseSolved31": "Aufgabe 3.1 gelöst!", + "exerciseSolved32": "Aufgabe 3.2 gelöst!", + "exerciseSolved33": "Aufgabe 3.3 gelöst!" }, "oclock": "Uhr", "ordering": { diff --git a/software/src/locales/en.json b/software/src/locales/en.json index eccf835..fc37e31 100644 --- a/software/src/locales/en.json +++ b/software/src/locales/en.json @@ -49,22 +49,21 @@ "bankName": "Bank name", "iban": "IBAN" }, - "account": { - "backToLogin": "Back to Login", - "username": "Username", - "password": "Password", - "noAccountRegister": "Create new Account!", - "register": "Create Account", - "delete": "Delete Account", - "managingAccount": "Managing Account", - "address": "Address | Addresses", - "payment": "Payment | Payments", - "masterData": "Master data", - "noAddresses": "No Addresses found", - "noPayments": "No payments found", - "newPayment": "New Payment", - "email": "E-Mail address" - }, + "account": "Account | Accounts", + "backToLogin": "Back to Login", + "username": "Username", + "password": "Password", + "noAccountRegister": "Create new Account!", + "register": "Create Account", + "delete": "Delete Account", + "managingAccount": "Managing Account", + "address": "Address | Addresses", + "payment": "Payment | Payments", + "masterData": "Master data", + "noAddresses": "No Addresses found", + "noPayments": "No payments found", + "newPayment": "New Payment", + "email": "E-Mail address", "bannerMessages": { "loginSuccessful": "Login erfolgreich!", "wrongLogin": "Falscher Username oder falsches Passwort!", @@ -84,7 +83,18 @@ "productDeleteSuccessful": "Product successfully deleted", "productDeleteError": "Error on product delete", "basketProductAdded": "Add product to basket", - "basketProductRemoved": "Product removed from basket" + "basketProductRemoved": "Product removed from basket", + "exerciseSolved01": "Exercise 0.1 solved!", + "exerciseSolved02": "Exercise 0.2 solved!", + "exerciseSolved11": "Exercise 1.1 solved!", + "exerciseSolved12": "Exercise 1.2 solved!", + "exerciseSolved13": "Exercise 1.3 solved!", + "exerciseSolved21": "Exercise 2.1 solved!", + "exerciseSolved22": "Exercise 2.2 solved!", + "exerciseSolved23": "Exercise 2.3 solved!", + "exerciseSolved31": "Exercise 3.1 solved!", + "exerciseSolved32": "Exercise 3.2 solved!", + "exerciseSolved33": "Exercise 3.3 solved!" }, "oclock": "o'clock", "ordering": { diff --git a/software/src/pages/admin/accountsAdminPage/index.vue b/software/src/pages/admin/accountsAdminPage/index.vue new file mode 100644 index 0000000..bcf02e3 --- /dev/null +++ b/software/src/pages/admin/accountsAdminPage/index.vue @@ -0,0 +1,6 @@ + + + + Accounts Admin Page + \ No newline at end of file diff --git a/software/src/pages/admin/accountsPage/index.vue b/software/src/pages/admin/bandsAdminPage/index.vue similarity index 75% rename from software/src/pages/admin/accountsPage/index.vue rename to software/src/pages/admin/bandsAdminPage/index.vue index 29097a7..d1fce7e 100644 --- a/software/src/pages/admin/accountsPage/index.vue +++ b/software/src/pages/admin/bandsAdminPage/index.vue @@ -2,5 +2,5 @@ - Accounts Page + Bands Admin Page \ No newline at end of file diff --git a/software/src/pages/admin/brandsPage/index.vue b/software/src/pages/admin/brandsPage/index.vue deleted file mode 100644 index bbd0497..0000000 --- a/software/src/pages/admin/brandsPage/index.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - - \ No newline at end of file diff --git a/software/src/pages/admin/categoriesAdminPage/index.vue b/software/src/pages/admin/categoriesAdminPage/index.vue new file mode 100644 index 0000000..aacff99 --- /dev/null +++ b/software/src/pages/admin/categoriesAdminPage/index.vue @@ -0,0 +1,6 @@ + + + + Categories Admin Page + \ No newline at end of file diff --git a/software/src/pages/admin/categoriesPage/index.vue b/software/src/pages/admin/categoriesPage/index.vue deleted file mode 100644 index ffadb45..0000000 --- a/software/src/pages/admin/categoriesPage/index.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/software/src/pages/admin/concertsAdminPage/index.vue b/software/src/pages/admin/concertsAdminPage/index.vue new file mode 100644 index 0000000..06bd7b0 --- /dev/null +++ b/software/src/pages/admin/concertsAdminPage/index.vue @@ -0,0 +1,6 @@ + + + + Concerts Admin Page + \ No newline at end of file diff --git a/software/src/pages/admin/dashboardPage/index.vue b/software/src/pages/admin/dashboardPage/index.vue index 87470b9..4865702 100644 --- a/software/src/pages/admin/dashboardPage/index.vue +++ b/software/src/pages/admin/dashboardPage/index.vue @@ -1,6 +1,149 @@ - Admin Dashboard Page + + + + + + {{ bandStore.bands.length }} {{ $t('band', 2) }} + + + + + {{ $t('more') }} + + + + + + + + + {{ concertStore.concerts.length }} {{ $t('concert', 2) }} + + + + {{ soldOutConcerts }} {{ $t('soldOut') }} + + + + + {{ $t('more') }} + + + + + + + + + + {{ locationStore.locations.length }} {{ $t('location', 2) }} + + + + + {{ $t('more') }} + + + + + + + + + + + + + + + + + + {{ bandStore.availableGenres.length }} {{ $t('genres', 2) }} + + + + + {{ $t('more') }} + + + + + + + + + {{ bandStore.availableGenres.length }} {{ $t('genres', 2) }} + + + + + {{ $t('more') }} + + + + + + + \ No newline at end of file diff --git a/software/src/pages/admin/genresAdminPage/index.vue b/software/src/pages/admin/genresAdminPage/index.vue new file mode 100644 index 0000000..67cbbec --- /dev/null +++ b/software/src/pages/admin/genresAdminPage/index.vue @@ -0,0 +1,6 @@ + + + + Genres Admin Page + \ No newline at end of file diff --git a/software/src/pages/admin/locationsAdminPage/index.vue b/software/src/pages/admin/locationsAdminPage/index.vue new file mode 100644 index 0000000..0fd0c48 --- /dev/null +++ b/software/src/pages/admin/locationsAdminPage/index.vue @@ -0,0 +1,6 @@ + + + + Locations Admin Page + \ No newline at end of file diff --git a/software/src/pages/admin/productsPage/index.vue b/software/src/pages/admin/productsPage/index.vue deleted file mode 100644 index 48f4df0..0000000 --- a/software/src/pages/admin/productsPage/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/software/src/pages/admin/productsPage/productEditDialog.vue b/software/src/pages/admin/productsPage/productEditDialog.vue deleted file mode 100644 index d2c6dc9..0000000 --- a/software/src/pages/admin/productsPage/productEditDialog.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ editProduct.images }} - {{ editProduct.specs }} - - - - {{ $t('save') }} - - - - \ No newline at end of file diff --git a/software/src/router/admin.routes.ts b/software/src/router/admin.routes.ts index 642ce19..50b9bca 100644 --- a/software/src/router/admin.routes.ts +++ b/software/src/router/admin.routes.ts @@ -1,28 +1,38 @@ import DashboardPage from "@/pages/admin/dashboardPage/index.vue" -import CategoriesPage from "@/pages/admin/categoriesPage/index.vue" -import AccountsPage from "@/pages/admin/accountsPage/index.vue" -import ProductsPage from "@/pages/admin/productsPage/index.vue" -import BrandsPage from "@/pages/admin/brandsPage/index.vue" +import ConcertsAdminPage from "@/pages/admin/concertsAdminPage/index.vue" +import BandsAdminPage from "@/pages/admin/bandsAdminPage/index.vue" +import AccountsAdminPage from "@/pages/admin/accountsAdminPage/index.vue" +import GenresAdminPage from "@/pages/admin/genresAdminPage/index.vue" +import CategoriesAdminPage from "@/pages/admin/categoriesAdminPage/index.vue" +import LocationsAdminPage from "@/pages/admin/locationsAdminPage/index.vue" export const adminRoutes = [ { - path: '/admin/dashboard', + path: '/admin', component: DashboardPage }, { - path: '/admin/categories', - component: CategoriesPage + path: '/admin/concerts', + component: ConcertsAdminPage + }, + { + path: '/admin/bands', + component: BandsAdminPage }, { path: '/admin/accounts', - component: AccountsPage + component: AccountsAdminPage }, { - path: '/admin/products', - component: ProductsPage + path: '/admin/genres', + component: GenresAdminPage }, { - path: '/admin/brands', - component: BrandsPage - } + path: '/admin/categories', + component: CategoriesAdminPage + }, + { + path: '/admin/locations', + component: LocationsAdminPage + }, ] \ No newline at end of file diff --git a/software/src/stores/exercise.store.ts b/software/src/stores/exercise.store.ts index 66b0221..81082ca 100644 --- a/software/src/stores/exercise.store.ts +++ b/software/src/stores/exercise.store.ts @@ -2,6 +2,8 @@ import { fetchAllExerciseGroups, updateExercise } from "@/data/api/exerciseApi"; import { ExerciseGroupApiModel } from "@/data/models/exercises/exerciseGroupApiModel"; import { defineStore } from "pinia"; import { ref } from "vue"; +import { useFeedbackStore } from "./feedback.store"; +import { BannerStateEnum } from "@/data/enums/bannerStateEnum"; export const useExerciseStore = defineStore("exerciseStore", { state: () => ({ @@ -23,10 +25,55 @@ export const useExerciseStore = defineStore("exerciseStore", { }, solveExercise(exerciseGroupNr: number, exerciseNr: number) { + const feedbackStore = useFeedbackStore() this.fetchInProgress = true updateExercise(exerciseGroupNr, exerciseNr, true) .then(result => { + let bannerState = BannerStateEnum.ERROR + + switch(exerciseGroupNr) { + case 0: { + switch(exerciseNr) { + case 1: bannerState = BannerStateEnum.EXERCISESOLVED01; break; + case 2: bannerState = BannerStateEnum.EXERCISESOLVED02; break; + } + + break; + } + + case 1: { + switch(exerciseNr) { + case 1: bannerState = BannerStateEnum.EXERCISESOLVED11; break; + case 2: bannerState = BannerStateEnum.EXERCISESOLVED12; break; + case 3: bannerState = BannerStateEnum.EXERCISESOLVED13; break; + } + + break; + } + + case 2: { + switch(exerciseNr) { + case 1: bannerState = BannerStateEnum.EXERCISESOLVED21; break; + case 2: bannerState = BannerStateEnum.EXERCISESOLVED22; break; + case 3: bannerState = BannerStateEnum.EXERCISESOLVED23; break; + } + + break; + } + + case 3: { + switch(exerciseNr) { + case 1: bannerState = BannerStateEnum.EXERCISESOLVED31; break; + case 2: bannerState = BannerStateEnum.EXERCISESOLVED32; break; + case 3: bannerState = BannerStateEnum.EXERCISESOLVED33; break; + } + + break; + } + } + + feedbackStore.changeBanner(bannerState) this.getAllExercises() }) } diff --git a/software/src/stores/feedback.store.ts b/software/src/stores/feedback.store.ts index 34304aa..8bc7dd6 100644 --- a/software/src/stores/feedback.store.ts +++ b/software/src/stores/feedback.store.ts @@ -41,6 +41,53 @@ export const useFeedbackStore = defineStore("feedbackStore", { } + ////////// Exercise feedback ////////// + + case BannerStateEnum.EXERCISESOLVED01: { + this.title = this.i18n.t("bannerMessages.exerciseSolved01"); break; + } + + case BannerStateEnum.EXERCISESOLVED02: { + this.title = this.i18n.t("bannerMessages.exerciseSolved02"); break; + } + + case BannerStateEnum.EXERCISESOLVED11: { + this.title = this.i18n.t("bannerMessages.exerciseSolved11"); break; + } + + case BannerStateEnum.EXERCISESOLVED12: { + this.title = this.i18n.t("bannerMessages.exerciseSolved12"); break; + } + + case BannerStateEnum.EXERCISESOLVED13: { + this.title = this.i18n.t("bannerMessages.exerciseSolved13"); break; + } + + case BannerStateEnum.EXERCISESOLVED21: { + this.title = this.i18n.t("bannerMessages.exerciseSolved21"); break; + } + + case BannerStateEnum.EXERCISESOLVED22: { + this.title = this.i18n.t("bannerMessages.exerciseSolved22"); break; + } + + case BannerStateEnum.EXERCISESOLVED23: { + this.title = this.i18n.t("bannerMessages.exerciseSolved23"); break; + } + + case BannerStateEnum.EXERCISESOLVED31: { + this.title = this.i18n.t("bannerMessages.exerciseSolved31"); break; + } + + case BannerStateEnum.EXERCISESOLVED32: { + this.title = this.i18n.t("bannerMessages.exerciseSolved32"); break; + } + + case BannerStateEnum.EXERCISESOLVED33: { + this.title = this.i18n.t("bannerMessages.exerciseSolved33"); break; + } + + ////////// API Endpoint /api ////////// case BannerStateEnum.DATABASERESETSUCCESSFUL: { @@ -79,25 +126,6 @@ export const useFeedbackStore = defineStore("feedbackStore", { } - ////////// API Endpoint /categories ////////// - - case BannerStateEnum.CATEGORYCREATESUCCESSFUL: { - this.title = this.i18n.t('bannerMessages.categoryCreateSuccessful'); break; - } - - case BannerStateEnum.CATEGORYDELETESUCESSFUL: { - this.title = this.i18n.t('bannerMessages.categoryDeleteSuccessful'); break; - } - - case BannerStateEnum.CATEGORYCREATEERROR: { - this.title = this.i18n.t('bannerMessages.categoryCreateError'); break; - } - - case BannerStateEnum.CATEGORYDELETEERROR: { - this.title = this.i18n.t('bannerMessages.categoryDeleteError'); break; - } - - ////////// API Endpoint /orders ////////// case BannerStateEnum.ORDERPLACESUCCESSFUL: { @@ -133,8 +161,6 @@ export const useFeedbackStore = defineStore("feedbackStore", { case BannerStateEnum.ACCOUNTLOGINWRONGLOGIN: case BannerStateEnum.ACCOUNTREGISTERERROR: case BannerStateEnum.ACCOUNTREGISTERUSERNAMEINUSE: - case BannerStateEnum.CATEGORYCREATEERROR: - case BannerStateEnum.CATEGORYDELETEERROR: case BannerStateEnum.PRODUCTDELETESUCCESSFUL: case BannerStateEnum.PRODUCTDELETEERROR: this.color = "red" @@ -146,14 +172,26 @@ export const useFeedbackStore = defineStore("feedbackStore", { case BannerStateEnum.ACCOUNTREGISTERSUCCESSFUL: case BannerStateEnum.ACCOUNTUPDATESUCCESSFUL: case BannerStateEnum.ACCOUNTLOGOUTSUCCESSFUL: - case BannerStateEnum.CATEGORYCREATESUCCESSFUL: - case BannerStateEnum.CATEGORYDELETESUCESSFUL: case BannerStateEnum.ORDERPLACESUCCESSFUL: case BannerStateEnum.PRODUCTCREATESUCCESSFUL: case BannerStateEnum.PRODUCTCREATEERROR: this.color = "green" break; + case BannerStateEnum.EXERCISESOLVED01: + case BannerStateEnum.EXERCISESOLVED02: + case BannerStateEnum.EXERCISESOLVED11: + case BannerStateEnum.EXERCISESOLVED12: + case BannerStateEnum.EXERCISESOLVED13: + case BannerStateEnum.EXERCISESOLVED21: + case BannerStateEnum.EXERCISESOLVED22: + case BannerStateEnum.EXERCISESOLVED23: + case BannerStateEnum.EXERCISESOLVED31: + case BannerStateEnum.EXERCISESOLVED32: + case BannerStateEnum.EXERCISESOLVED33: + this.color = "purple" + break; + case BannerStateEnum.BASKETPRODUCTREMOVED: this.color = "blue" } @@ -173,12 +211,6 @@ export const useFeedbackStore = defineStore("feedbackStore", { this.icon = "mdi-account" break; - case BannerStateEnum.CATEGORYCREATEERROR: - case BannerStateEnum.CATEGORYDELETEERROR: - case BannerStateEnum.CATEGORYCREATESUCCESSFUL: - case BannerStateEnum.CATEGORYDELETESUCESSFUL: - this.icon = "mdi-label" - break; case BannerStateEnum.PRODUCTDELETESUCCESSFUL: case BannerStateEnum.PRODUCTDELETEERROR: @@ -186,6 +218,20 @@ export const useFeedbackStore = defineStore("feedbackStore", { case BannerStateEnum.PRODUCTCREATEERROR: this.icon = "mdi-store" break; + + case BannerStateEnum.EXERCISESOLVED01: + case BannerStateEnum.EXERCISESOLVED02: + case BannerStateEnum.EXERCISESOLVED11: + case BannerStateEnum.EXERCISESOLVED12: + case BannerStateEnum.EXERCISESOLVED13: + case BannerStateEnum.EXERCISESOLVED21: + case BannerStateEnum.EXERCISESOLVED22: + case BannerStateEnum.EXERCISESOLVED23: + case BannerStateEnum.EXERCISESOLVED31: + case BannerStateEnum.EXERCISESOLVED32: + case BannerStateEnum.EXERCISESOLVED33: + this.icon = "mdi-check-circle-outline" + break; case BannerStateEnum.DATABASERESETSUCCESSFUL: this.icon = "mdi-database-refresh"