From bf72a6708340710e2f714388a26e6c4530e9d926 Mon Sep 17 00:00:00 2001 From: McMistrzYT <56406996+McMistrzYT@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:21:52 +0100 Subject: [PATCH] ratings update and publish script changed to shady's vps --- Server/Source/Routes/Ratings.ts | 64 +++++++++++++++++++++++++ Server/Source/Schemas/ForcedCategory.ts | 3 ++ package.json | 2 +- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Server/Source/Routes/Ratings.ts diff --git a/Server/Source/Routes/Ratings.ts b/Server/Source/Routes/Ratings.ts new file mode 100644 index 0000000..abbdae3 --- /dev/null +++ b/Server/Source/Routes/Ratings.ts @@ -0,0 +1,64 @@ +import { RequireAuthentication, ValidateBody } from "../Modules/Middleware"; +import { Router } from "express"; +import { Song } from "../Schemas/Song"; +import { Rating } from "../Schemas/Rating"; +import j from "joi"; + +const App = Router(); + +App.get("/:InternalID", async (req, res) => { + const SongData = await Song.findOne({ where: { ID: req.params.InternalID }, relations: { Ratings: true } }); + if (!SongData) + return res.status(404).json({ errorMessage: "The song you're trying to get the rating for has not been found." }); + + let Average = 0; + if (SongData.Ratings.length > 0) { + SongData.Ratings.map(x => Average += x.Stars); + Average = Average / SongData.Ratings.length; + } + + res.json({ + Average, + Amount: SongData.Ratings.length + }); +}) + +App.post("/:InternalID", +RequireAuthentication({ Ratings: { Rated: true } }), +ValidateBody(j.object({ + Rating: j.number().integer().min(1).max(5).required() +})), +async (req, res) => { + const SongData = await Song.findOne({ where: { ID: req.params.InternalID } }); + if (!SongData) + return res.status(404).json({ errorMessage: "The song you're trying to get the rating for has not been found." }); + + const Existing = req.user?.Ratings.find(x => SongData.ID === x.Rated.ID) + if (Existing) + { + Existing.Stars = req.body.Rating as number; + await Existing.save(); + return res.json({ + ...Existing, + Author: undefined, + Rated: SongData.ID + }); + } + + const CreatedRating = await Rating.create({ + Author: req.user, + Rated: SongData, + Stars: req.body.Rating as number + }).save(); + + res.json({ + ...CreatedRating, + Author: undefined, + Rated: SongData.ID + }); +}) + +export default { + App, + DefaultAPI: "/api/ratings" +} \ No newline at end of file diff --git a/Server/Source/Schemas/ForcedCategory.ts b/Server/Source/Schemas/ForcedCategory.ts index 9d0a9ec..7d570c7 100644 --- a/Server/Source/Schemas/ForcedCategory.ts +++ b/Server/Source/Schemas/ForcedCategory.ts @@ -12,6 +12,9 @@ export class ForcedCategory extends BaseEntity { @Column() Activated: boolean; + @Column() + Priority: number; + @ManyToMany(() => Song, { eager: true }) @JoinTable() Songs: Song[]; diff --git a/package.json b/package.json index 6f9334a..c8e5e81 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "vite", "build": "tsc && vite build", "create": "mkdir ./Out && npm run build && mv ./dist ./Out/dist && cd Server && tsc && cd .. && cp ./Server/.env ./Out && cp ./Server/package.json ./Out && cp ./Server/package-lock.json ./Out", - "publish": "npm run create && ssh mc \"cd /home/PartypackProd; rm -rf ./Out\" && scp -r ./Out mc:/home/PartypackProd && ssh mc \"cd /home/PartypackProd/Out; npm i; pm2 restart PartypackProd --update-env\" && rm -rf ./Out", + "publish": "npm run create && ssh shady \"cd /home/PartypackProd; rm -rf ./Out\" && scp -r ./Out shady:/home/PartypackProd && ssh shady \"cd /home/PartypackProd/Out; npm i; pm2 restart PartypackProd --update-env\" && rm -rf ./Out", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "dev:all": "start cmd.exe /k \"cd ./Server && npm run dev:watch\" && vite"