From 17907a51be4ace7765d54246f4cf99d27bc5b141 Mon Sep 17 00:00:00 2001 From: TobiZog Date: Tue, 26 Nov 2024 12:40:01 +0100 Subject: [PATCH] Improve exercise solution of 2.1, 2.2, 2.3 and 2.5 --- backend/routes/band.routes.ts | 4 +- src/scripts/imageScripts.ts | 11 +++--- src/stores/account.store.ts | 12 ++++++ src/stores/search.store.ts | 72 +++++++++++++++++++++++++++-------- 4 files changed, 77 insertions(+), 22 deletions(-) diff --git a/backend/routes/band.routes.ts b/backend/routes/band.routes.ts index 1f23f2e..5ac1d52 100644 --- a/backend/routes/band.routes.ts +++ b/backend/routes/band.routes.ts @@ -137,7 +137,6 @@ band.get("/search", async (req: Request, res: Response) => { // On stacked prompts, execute last prompt if (prompts.length > 1) { - console.log(prompts[prompts.length - 2]) const [results, metadata] = await sequelize.query(prompts[prompts.length - 2]) @@ -154,6 +153,9 @@ band.get("/search", async (req: Request, res: Response) => { .then(bands => { res.status(200).json(bands) }) + .catch(e => { + res.status(200).send() + }) } }) diff --git a/src/scripts/imageScripts.ts b/src/scripts/imageScripts.ts index e6521cc..7b0917c 100644 --- a/src/scripts/imageScripts.ts +++ b/src/scripts/imageScripts.ts @@ -3,11 +3,12 @@ import { load } from "exifreader" export async function loadLicense(url: string){ let result = "" - await load(url) - .then(tags => { - result = tags["Copyright"]["description"] + " by " + tags["Artist"]["description"] - }) - .catch(e => {}) + try { + await load(url) + .then(tags => { + result = tags["Copyright"]["description"] + " by " + tags["Artist"]["description"] + }) + } catch {} return result } \ No newline at end of file diff --git a/src/stores/account.store.ts b/src/stores/account.store.ts index ce9b601..875ae83 100644 --- a/src/stores/account.store.ts +++ b/src/stores/account.store.ts @@ -100,6 +100,18 @@ export const useAccountStore = defineStore("accountStore", { } }, + async refreshAccount() { + getAccount(this.userAccountToken) + .then(response => { + this.userAccount = response.data + + this.fetchInProgress = false + + this.privilegeBuy = true + this.adminPanelVisible = response.data.accountRole.privilegeAdminPanel + }) + }, + /** * Register a new account to the database * Log in on success diff --git a/src/stores/search.store.ts b/src/stores/search.store.ts index b4edf36..a7b9e6b 100644 --- a/src/stores/search.store.ts +++ b/src/stores/search.store.ts @@ -5,17 +5,22 @@ import { fetchLocationsBySearchTerm } from "../data/api/locationApi"; import { fetchConcertsBySearchTerm } from "../data/api/concertApi"; import { ConcertApiModel } from "@/data/models/acts/concertApiModel"; import { useExerciseStore } from "./exercise.store"; +import { AccountApiModel } from "@/data/models/user/accountApiModel"; +import { LocationApiModel } from "@/data/models/locations/locationApiModel"; +import { BandApiModel } from "@/data/models/acts/bandApiModel"; +import { useBandStore } from "./band.store"; +import { useAccountStore } from "./account.store"; export const useSearchStore = defineStore("searchStore", { state: () => ({ /** Search term */ - searchTerm: ref(""), + searchTerm: ref(""), /** Band results */ - bands: ref(), + bands: ref>([]), /** Location results */ - locations: ref(), + locations: ref>([]), /** Concert results */ concerts: ref>([]), @@ -37,28 +42,63 @@ export const useSearchStore = defineStore("searchStore", { this.alreadySearched = true this.fetchInProgress = true - // Exercise solutions - // todo: Rewrite to avoid easy exercise solution - if (this.searchTerm.endsWith("'); SELECT * FROM Accounts; --")) { - exerciseStore.solveExercise(2, 1) - } else if (this.searchTerm.endsWith("'); SELECT * FROM AccountRoles; --")) { - exerciseStore.solveExercise(2, 2) - } else if (this.searchTerm.includes("'); UPDATE Accounts SET accountRoleId = 2 WHERE username = ")) { - exerciseStore.solveExercise(2, 3) - } else if (this.searchTerm.includes("'); DELETE FROM Ratings WHERE rating = 5; --")) { - exerciseStore.solveExercise(2, 5) - } - + /** + * Fetch all bands by this.searchTerm + */ await fetchBandsBySearchTerm(this.searchTerm) - .then(result => { + .then(async result => { this.bands = result.data + + // Check for exercise solution + if (result.data.length != 0) { + // Exercise 2.1 + if (this.bands[0].username != undefined) { + exerciseStore.solveExercise(2, 1) + console.log("Exercise 2.1 solved") + } + // Exercise 2.2 + else if (this.bands[0].privilegeAdminPanel != undefined) { + exerciseStore.solveExercise(2, 2) + console.log("Exercise 2.2 solved") + } + } + + // Exercise 2.3 + else if (this.searchTerm.includes("UPDATE")) { + const accountStore = useAccountStore() + await accountStore.refreshAccount() + + if (accountStore.userAccount.accountRole.privilegeAdminPanel == true) { + exerciseStore.solveExercise(2, 3) + console.log("Exercise 2.3 solved") + } + } + + // Exercise 2.5 + else if (this.searchTerm.includes("DELETE")) { + const bandStore = useBandStore() + await bandStore.getBand("muse") + + if (bandStore.band.ratingValues.find(rating => rating.value == 5).count == 0) { + exerciseStore.solveExercise(2, 5) + console.log("Exercise 2.5 solved") + } + } }) + + /** + * Fetch all locations by this.searchTerm + */ await fetchLocationsBySearchTerm(this.searchTerm) .then(result => { this.locations = result.data }) + + /** + * Fetch all concerts by this.searchTerm + */ await fetchConcertsBySearchTerm(this.searchTerm) .then(result => { this.concerts = result.data