Refaktor, rozdělení api, zpřehlednění kódu
This commit is contained in:
113
server/src/routes/foodRoutes.ts
Normal file
113
server/src/routes/foodRoutes.ts
Normal file
@@ -0,0 +1,113 @@
|
||||
import express from "express";
|
||||
import { getLogin, getTrusted } from "../auth";
|
||||
import { getDateForWeekIndex, addChoice, removeChoices, removeChoice, updateDepartureTime, getToday } from "../service";
|
||||
import { getDayOfWeekIndex, parseToken } from "../utils";
|
||||
import { getWebsocket } from "../websocket";
|
||||
|
||||
/**
|
||||
* Ověří a vrátí index dne v týdnu z požadavku, za předpokladu, že byl předán, a je zároveň
|
||||
* roven nebo vyšší indexu dnešního dne.
|
||||
*
|
||||
* @param req request
|
||||
* @returns index dne v týdnu
|
||||
*/
|
||||
const parseValidateFutureDayIndex = (req: any) => {
|
||||
if (req.body.dayIndex == null) {
|
||||
throw Error(`Nebyl předán index dne v týdnu.`);
|
||||
}
|
||||
const todayDayIndex = getDayOfWeekIndex(getToday());
|
||||
const dayIndex = parseInt(req.body.dayIndex);
|
||||
if (isNaN(dayIndex)) {
|
||||
throw Error(`Neplatný index dne v týdnu: ${req.body.dayIndex}`);
|
||||
}
|
||||
if (dayIndex < todayDayIndex) {
|
||||
throw Error(`Předaný index dne v týdnu (${dayIndex}) nesmí být nižší než dnešní den (${todayDayIndex})`);
|
||||
}
|
||||
return dayIndex;
|
||||
}
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.post("/addChoice", async (req, res, next) => {
|
||||
const login = getLogin(parseToken(req));
|
||||
const trusted = getTrusted(parseToken(req));
|
||||
if (req.body.locationIndex > -1) {
|
||||
let date = undefined;
|
||||
if (req.body.dayIndex != null) {
|
||||
let dayIndex;
|
||||
try {
|
||||
dayIndex = parseValidateFutureDayIndex(req);
|
||||
} catch (e: any) {
|
||||
return res.status(400).json({ error: e.message });
|
||||
}
|
||||
date = getDateForWeekIndex(dayIndex);
|
||||
}
|
||||
try {
|
||||
const data = await addChoice(login, trusted, req.body.locationIndex, req.body.foodIndex, date);
|
||||
getWebsocket().emit("message", data);
|
||||
return res.status(200).json(data);
|
||||
} catch (e: any) { next(e) }
|
||||
}
|
||||
return res.status(400); // TODO přidat popis chyby
|
||||
});
|
||||
|
||||
router.post("/removeChoices", async (req, res, next) => {
|
||||
const login = getLogin(parseToken(req));
|
||||
const trusted = getTrusted(parseToken(req));
|
||||
let date = undefined;
|
||||
if (req.body.dayIndex != null) {
|
||||
let dayIndex;
|
||||
try {
|
||||
dayIndex = parseValidateFutureDayIndex(req);
|
||||
} catch (e: any) {
|
||||
return res.status(400).json({ error: e.message });
|
||||
}
|
||||
date = getDateForWeekIndex(dayIndex);
|
||||
}
|
||||
try {
|
||||
const data = await removeChoices(login, trusted, req.body.locationIndex, date);
|
||||
getWebsocket().emit("message", data);
|
||||
res.status(200).json(data);
|
||||
} catch (e: any) { next(e) }
|
||||
});
|
||||
|
||||
router.post("/removeChoice", async (req, res, next) => {
|
||||
const login = getLogin(parseToken(req));
|
||||
const trusted = getTrusted(parseToken(req));
|
||||
let date = undefined;
|
||||
if (req.body.dayIndex != null) {
|
||||
let dayIndex;
|
||||
try {
|
||||
dayIndex = parseValidateFutureDayIndex(req);
|
||||
} catch (e: any) {
|
||||
return res.status(400).json({ error: e.message });
|
||||
}
|
||||
date = getDateForWeekIndex(dayIndex);
|
||||
}
|
||||
try {
|
||||
const data = await removeChoice(login, trusted, req.body.locationIndex, req.body.foodIndex, date);
|
||||
getWebsocket().emit("message", data);
|
||||
res.status(200).json(data);
|
||||
} catch (e: any) { next(e) }
|
||||
});
|
||||
|
||||
router.post("/changeDepartureTime", async (req, res, next) => {
|
||||
const login = getLogin(parseToken(req));
|
||||
let date = undefined;
|
||||
if (req.body.dayIndex != null) {
|
||||
let dayIndex;
|
||||
try {
|
||||
dayIndex = parseValidateFutureDayIndex(req);
|
||||
} catch (e: any) {
|
||||
return res.status(400).json({ error: e.message });
|
||||
}
|
||||
date = getDateForWeekIndex(dayIndex);
|
||||
}
|
||||
try {
|
||||
const data = await updateDepartureTime(login, req.body?.time, date);
|
||||
getWebsocket().emit("message", data);
|
||||
res.status(200).json(data);
|
||||
} catch (e: any) { next(e) }
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user