99 lines
3.8 KiB
TypeScript
99 lines
3.8 KiB
TypeScript
import express, { Request, Response, NextFunction } from "express";
|
|
import {
|
|
addMeal, deleteMeal, fillSameNameMeals, getDay, getMealHistory, getMealSources, getRange, setMealMultiplier,
|
|
updateMeal,
|
|
} from "../meals";
|
|
import { getDayOverview } from "../dayOverview";
|
|
import { getLogin } from "../auth";
|
|
import { formatDate, getToday, parseToken, requireIsoDate } from "../utils";
|
|
|
|
const router = express.Router();
|
|
|
|
/**
|
|
* Vrátí jídla přihlášeného uživatele za jeden den. Bez parametru vrací dnešek.
|
|
*/
|
|
router.get("/day", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const date = req.query.date == null
|
|
? formatDate(getToday())
|
|
: requireIsoDate(req.query.date, 'date');
|
|
res.status(200).json(await getDay(login, date));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/**
|
|
* Vrátí dny přihlášeného uživatele v rozsahu, které obsahují alespoň jeden záznam.
|
|
*/
|
|
router.get("/range", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const from = requireIsoDate(req.query.from, 'from');
|
|
const to = requireIsoDate(req.query.to, 'to');
|
|
res.status(200).json(await getRange(login, from, to));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Vrátí jídla z historie, každý název jednou — pro našeptávání při zakládání jídla. */
|
|
router.get("/history", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
res.status(200).json(await getMealHistory(login));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Vrátí zdroje jídel, které uživatel už použil — nabídka pro pole Zdroj. */
|
|
router.get("/sources", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
res.status(200).json(await getMealSources(login));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Doplní energii a živiny jídla do ostatních jídel stejného názvu, která je nemají. */
|
|
router.post("/fillSameName", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const { id, date, dryRun } = req.body ?? {};
|
|
res.status(200).json(await fillSameNameMeals(login, id, date, dryRun === true));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Přidá jídlo do zvoleného dne. */
|
|
router.post("/add", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
res.status(200).json(await addMeal(login, req.body));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Upraví existující záznam o jídle. */
|
|
router.post("/update", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const { id, ...input } = req.body ?? {};
|
|
res.status(200).json(await updateMeal(login, id, input));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Smaže záznam o jídle. */
|
|
router.post("/delete", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const { id, date } = req.body ?? {};
|
|
res.status(200).json(await deleteMeal(login, id, date));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
/** Nastaví násobek porce z přehledu dne a vrátí celý přehled, protože se mění i bilance. */
|
|
router.post("/multiplier", async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const login = getLogin(parseToken(req));
|
|
const { id, date, multiplier } = req.body ?? {};
|
|
const day = await setMealMultiplier(login, id, date, multiplier);
|
|
res.status(200).json(await getDayOverview(login, day));
|
|
} catch (e) { next(e); }
|
|
});
|
|
|
|
export default router;
|