import express, { Request } from "express"; import { getLogin } from "../auth"; import { createPizzaDay, deletePizzaDay, getPizzaList, addPizzaOrder, removePizzaOrder, lockPizzaDay, unlockPizzaDay, finishPizzaOrder, finishPizzaDelivery, updatePizzaDayNote, updatePizzaFee } from "../pizza"; import { parseToken } from "../utils"; import { getWebsocket } from "../websocket"; import { AddPizzaData, FinishDeliveryData, RemovePizzaData, UpdatePizzaDayNoteData, UpdatePizzaFeeData } from "../../../types"; const router = express.Router(); /** Založí pizza day pro aktuální den, za předpokladu že dosud neexistuje. */ router.post("/create", async (req: Request<{}, any, undefined>, res) => { const login = getLogin(parseToken(req)); const data = await createPizzaDay(login); res.status(200).json(data); getWebsocket().emit("message", data); }); /** Smaže pizza day pro aktuální den, za předpokladu že existuje. */ router.post("/delete", async (req: Request<{}, any, undefined>, res) => { const login = getLogin(parseToken(req)); const data = await deletePizzaDay(login); getWebsocket().emit("message", data); }); router.post("/add", async (req: Request<{}, any, AddPizzaData["body"]>, res) => { const login = getLogin(parseToken(req)); if (isNaN(req.body?.pizzaIndex)) { throw Error("Nebyl předán index pizzy"); } const pizzaIndex = req.body.pizzaIndex; if (isNaN(req.body?.pizzaSizeIndex)) { throw Error("Nebyl předán index velikosti pizzy"); } const pizzaSizeIndex = req.body.pizzaSizeIndex; let pizzy = await getPizzaList(); if (!pizzy) { throw Error("Selhalo získání seznamu dostupných pizz."); } if (!pizzy[pizzaIndex]) { throw Error("Neplatný index pizzy: " + pizzaIndex); } if (!pizzy[pizzaIndex].sizes[pizzaSizeIndex]) { throw Error("Neplatný index velikosti pizzy: " + pizzaSizeIndex); } const data = await addPizzaOrder(login, pizzy[pizzaIndex], pizzy[pizzaIndex].sizes[pizzaSizeIndex]); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/remove", async (req: Request<{}, any, RemovePizzaData["body"]>, res) => { const login = getLogin(parseToken(req)); if (!req.body?.pizzaOrder) { throw Error("Nebyla předána objednávka"); } const data = await removePizzaOrder(login, req.body?.pizzaOrder); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/lock", async (req: Request<{}, any, undefined>, res) => { const login = getLogin(parseToken(req)); const data = await lockPizzaDay(login); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/unlock", async (req: Request<{}, any, undefined>, res) => { const login = getLogin(parseToken(req)); const data = await unlockPizzaDay(login); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/finishOrder", async (req: Request<{}, any, undefined>, res) => { const login = getLogin(parseToken(req)); const data = await finishPizzaOrder(login); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/finishDelivery", async (req: Request<{}, any, FinishDeliveryData["body"]>, res) => { const login = getLogin(parseToken(req)); const data = await finishPizzaDelivery(login, req.body.bankAccount, req.body.bankAccountHolder); getWebsocket().emit("message", data); res.status(200).json({}); }); router.post("/updatePizzaDayNote", async (req: Request<{}, any, UpdatePizzaDayNoteData["body"]>, res, next) => { const login = getLogin(parseToken(req)); try { if (req.body.note && req.body.note.length > 70) { throw Error("Poznámka může mít maximálně 70 znaků"); } const data = await updatePizzaDayNote(login, req.body.note); getWebsocket().emit("message", data); res.status(200).json(data); } catch (e: any) { next(e) } }); router.post("/updatePizzaFee", async (req: Request<{}, any, UpdatePizzaFeeData["body"]>, res, next) => { const login = getLogin(parseToken(req)); if (!req.body.login) { return res.status(400).json({ error: "Nebyl předán login cílového uživatele" }); } try { const data = await updatePizzaFee(login, req.body.login, req.body.text, req.body.price); getWebsocket().emit("message", data); res.status(200).json(data); } catch (e: any) { next(e) } }); export default router;