- #21: Add missing await in removeChoiceIfPresent() to prevent user appearing in two restaurants - #15: Add 1-hour TTL for menu refetching to avoid scraping on every page load - #9: Block stats API and UI navigation for future dates - #14: Add restaurant warnings (missing soup/prices, stale data) with warning icon - #12: Pre-fill restaurant/departure dropdowns from existing choices on page refresh - #10: Add voting statistics endpoint and table on stats page
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import express, { Request } from "express";
|
|
import { getLogin } from "../auth";
|
|
import { parseToken } from "../utils";
|
|
import { getUserVotes, updateFeatureVote, getVotingStats } from "../voting";
|
|
import { GetVotesData, UpdateVoteData } from "../../../types";
|
|
|
|
const router = express.Router();
|
|
|
|
router.get("/getVotes", async (req: Request<{}, any, GetVotesData["body"]>, res) => {
|
|
const login = getLogin(parseToken(req));
|
|
const data = await getUserVotes(login);
|
|
res.status(200).json(data);
|
|
});
|
|
|
|
router.post("/updateVote", async (req: Request<{}, any, UpdateVoteData["body"]>, res, next) => {
|
|
const login = getLogin(parseToken(req));
|
|
if (req.body?.option == null || req.body?.active == null) {
|
|
res.status(400).json({ error: "Chybné parametry volání" });
|
|
}
|
|
try {
|
|
const data = await updateFeatureVote(login, req.body.option, req.body.active);
|
|
res.status(200).json(data);
|
|
} catch (e: any) { next(e) }
|
|
});
|
|
|
|
router.get("/stats", async (req, res, next) => {
|
|
try {
|
|
const data = await getVotingStats();
|
|
res.status(200).json(data);
|
|
} catch (e: any) { next(e) }
|
|
});
|
|
|
|
export default router; |