Compare commits

..

No commits in common. "e611d369951b2860df5b803a9bd70789c9b4d41b" and "a2167038dab857783b9e50742a2e836ed806f063" have entirely different histories.

11 changed files with 68 additions and 128 deletions

View File

@ -63,7 +63,7 @@ async function blobRequest(
export const api = { export const api = {
get: <TResponse>(url: string) => request<TResponse>(url), get: <TResponse>(url: string) => request<TResponse>(url),
blobGet: (url: string) => blobRequest(url), blobGet: (url: string) => blobRequest(url),
post: <TBody, TResponse>(url: string, body?: TBody) => request<TResponse>(url, { method: 'POST', body: JSON.stringify(body), headers: { 'Content-Type': 'application/json' } }), post: <TBody extends BodyInit, TResponse>(url: string, body: TBody) => request<TResponse>(url, { method: 'POST', body, headers: { 'Content-Type': 'application/json' } }),
} }
export const getQrUrl = (login: string) => { export const getQrUrl = (login: string) => {
@ -79,5 +79,5 @@ export const getData = async (dayIndex?: number) => {
} }
export const login = async (login?: string) => { export const login = async (login?: string) => {
return await api.post<any, any>('/api/login', { login }); return await api.post<any, any>('/api/login', JSON.stringify({ login }));
} }

View File

@ -4,7 +4,7 @@ import { api } from "./Api";
const EASTER_EGGS_API_PREFIX = '/api/easterEggs'; const EASTER_EGGS_API_PREFIX = '/api/easterEggs';
export const getEasterEgg = async (): Promise<EasterEgg | undefined> => { export const getEasterEgg = async (): Promise<EasterEgg | undefined> => {
return await api.get<EasterEgg>(`${EASTER_EGGS_API_PREFIX}`); return await api.get(`${EASTER_EGGS_API_PREFIX}`);
} }
export const getImage = async (url: string) => { export const getImage = async (url: string) => {

View File

@ -1,28 +1,27 @@
import { AddChoiceRequest, ChangeDepartureTimeRequest, RemoveChoiceRequest, RemoveChoicesRequest, UpdateNoteRequest } from "../types";
import { api } from "./Api"; import { api } from "./Api";
const FOOD_API_PREFIX = '/api/food'; const FOOD_API_PREFIX = '/api/food';
export const addChoice = async (locationIndex: number, foodIndex?: number, dayIndex?: number) => { export const addChoice = async (locationIndex: number, foodIndex?: number, dayIndex?: number) => {
return await api.post<AddChoiceRequest, void>(`${FOOD_API_PREFIX}/addChoice`, { locationIndex, foodIndex, dayIndex }); return await api.post<any, any>(`${FOOD_API_PREFIX}/addChoice`, JSON.stringify({ locationIndex, foodIndex, dayIndex }));
} }
export const removeChoices = async (locationIndex: number, dayIndex?: number) => { export const removeChoices = async (locationIndex: number, dayIndex?: number) => {
return await api.post<RemoveChoicesRequest, void>(`${FOOD_API_PREFIX}/removeChoices`, { locationIndex, dayIndex }); return await api.post<any, any>(`${FOOD_API_PREFIX}/removeChoices`, JSON.stringify({ locationIndex, dayIndex }));
} }
export const removeChoice = async (locationIndex: number, foodIndex: number, dayIndex?: number) => { export const removeChoice = async (locationIndex: number, foodIndex: number, dayIndex?: number) => {
return await api.post<RemoveChoiceRequest, void>(`${FOOD_API_PREFIX}/removeChoice`, { locationIndex, foodIndex, dayIndex }); return await api.post<any, any>(`${FOOD_API_PREFIX}/removeChoice`, JSON.stringify({ locationIndex, foodIndex, dayIndex }));
} }
export const updateNote = async (note?: string, dayIndex?: number) => { export const updateNote = async (note?: string, dayIndex?: number) => {
return await api.post<UpdateNoteRequest, void>(`${FOOD_API_PREFIX}/updateNote`, { note, dayIndex }); return await api.post<any, any>(`${FOOD_API_PREFIX}/updateNote`, JSON.stringify({ note, dayIndex }));
} }
export const changeDepartureTime = async (time: string, dayIndex?: number) => { export const changeDepartureTime = async (time: string, dayIndex?: number) => {
return await api.post<ChangeDepartureTimeRequest, void>(`${FOOD_API_PREFIX}/changeDepartureTime`, { time, dayIndex }); return await api.post<any, any>(`${FOOD_API_PREFIX}/changeDepartureTime`, JSON.stringify({ time, dayIndex }));
} }
export const jdemeObed = async () => { export const jdemeObed = async () => {
return await api.post<undefined, void>(`${FOOD_API_PREFIX}/jdemeObed`); return await api.post<any, any>(`${FOOD_API_PREFIX}/jdemeObed`, JSON.stringify({}));
} }

View File

@ -1,44 +1,44 @@
import { AddPizzaRequest, FinishDeliveryRequest, PizzaOrder, RemovePizzaRequest, UpdatePizzaDayNoteRequest, UpdatePizzaFeeRequest } from "../types"; import { PizzaOrder } from "../types";
import { api } from "./Api"; import { api } from "./Api";
const PIZZADAY_API_PREFIX = '/api/pizzaDay'; const PIZZADAY_API_PREFIX = '/api/pizzaDay';
export const createPizzaDay = async () => { export const createPizzaDay = async () => {
return await api.post<undefined, void>(`${PIZZADAY_API_PREFIX}/create`); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/create`, undefined);
} }
export const deletePizzaDay = async () => { export const deletePizzaDay = async () => {
return await api.post<undefined, void>(`${PIZZADAY_API_PREFIX}/delete`); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/delete`, undefined);
} }
export const lockPizzaDay = async () => { export const lockPizzaDay = async () => {
return await api.post<undefined, void>(`${PIZZADAY_API_PREFIX}/lock`); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/lock`, undefined);
} }
export const unlockPizzaDay = async () => { export const unlockPizzaDay = async () => {
return await api.post<undefined, void>(`${PIZZADAY_API_PREFIX}/unlock`); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/unlock`, undefined);
} }
export const finishOrder = async () => { export const finishOrder = async () => {
return await api.post<undefined, void>(`${PIZZADAY_API_PREFIX}/finishOrder`); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/finishOrder`, undefined);
} }
export const finishDelivery = async (bankAccount?: string, bankAccountHolder?: string) => { export const finishDelivery = async (bankAccount?: string, bankAccountHolder?: string) => {
return await api.post<FinishDeliveryRequest, void>(`${PIZZADAY_API_PREFIX}/finishDelivery`, { bankAccount, bankAccountHolder }); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/finishDelivery`, JSON.stringify({ bankAccount, bankAccountHolder }));
} }
export const addPizza = async (pizzaIndex: number, pizzaSizeIndex: number) => { export const addPizza = async (pizzaIndex: number, pizzaSizeIndex: number) => {
return await api.post<AddPizzaRequest, void>(`${PIZZADAY_API_PREFIX}/add`, { pizzaIndex, pizzaSizeIndex }); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/add`, JSON.stringify({ pizzaIndex, pizzaSizeIndex }));
} }
export const removePizza = async (pizzaOrder: PizzaOrder) => { export const removePizza = async (pizzaOrder: PizzaOrder) => {
return await api.post<RemovePizzaRequest, void>(`${PIZZADAY_API_PREFIX}/remove`, { pizzaOrder }); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/remove`, JSON.stringify({ pizzaOrder }));
} }
export const updatePizzaDayNote = async (note?: string) => { export const updatePizzaDayNote = async (note?: string) => {
return await api.post<UpdatePizzaDayNoteRequest, void>(`${PIZZADAY_API_PREFIX}/updatePizzaDayNote`, { note }); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/updatePizzaDayNote`, JSON.stringify({ note }));
} }
export const updatePizzaFee = async (login: string, text?: string, price?: number) => { export const updatePizzaFee = async (login: string, text?: string, price?: number) => {
return await api.post<UpdatePizzaFeeRequest, void>(`${PIZZADAY_API_PREFIX}/updatePizzaFee`, { login, text, price }); return await api.post<any, any>(`${PIZZADAY_API_PREFIX}/updatePizzaFee`, JSON.stringify({ login, text, price }));
} }

View File

@ -1,12 +1,12 @@
import { FeatureRequest, UpdateFeatureVoteRequest } from "../types"; import { FeatureRequest } from "../types";
import { api } from "./Api"; import { api } from "./Api";
const VOTING_API_PREFIX = '/api/voting'; const VOTING_API_PREFIX = '/api/voting';
export const getFeatureVotes = async () => { export const getFeatureVotes = async () => {
return await api.get<FeatureRequest[]>(`${VOTING_API_PREFIX}/getVotes`); return await api.get<any>(`${VOTING_API_PREFIX}/getVotes`);
} }
export const updateFeatureVote = async (option: FeatureRequest, active: boolean) => { export const updateFeatureVote = async (option: FeatureRequest, active: boolean) => {
return await api.post<UpdateFeatureVoteRequest, void>(`${VOTING_API_PREFIX}/updateVote`, { option, active }); return await api.post<any, any>(`${VOTING_API_PREFIX}/updateVote`, JSON.stringify({ option, active }));
} }

View File

@ -1,10 +1,10 @@
import express, { Request } from "express"; import express from "express";
import { getLogin, getTrusted } from "../auth"; import { getLogin, getTrusted } from "../auth";
import { addChoice, addVolatileData, getDateForWeekIndex, getToday, removeChoice, removeChoices, updateDepartureTime, updateNote } from "../service"; import { addChoice, addVolatileData, getDateForWeekIndex, getToday, removeChoice, removeChoices, updateDepartureTime, updateNote } from "../service";
import { getDayOfWeekIndex, parseToken } from "../utils"; import { getDayOfWeekIndex, parseToken } from "../utils";
import { getWebsocket } from "../websocket"; import { getWebsocket } from "../websocket";
import { callNotifikace } from "../notifikace"; import { callNotifikace } from "../notifikace";
import { AddChoiceRequest, ChangeDepartureTimeRequest, IDayIndex, RemoveChoiceRequest, RemoveChoicesRequest, UdalostEnum, UpdateNoteRequest } from "../../../types"; import { UdalostEnum } from "../../../types";
/** /**
* Ověří a vrátí index dne v týdnu z požadavku, za předpokladu, že byl předán, a je zároveň * Ověří a vrátí index dne v týdnu z požadavku, za předpokladu, že byl předán, a je zároveň
@ -13,12 +13,12 @@ import { AddChoiceRequest, ChangeDepartureTimeRequest, IDayIndex, RemoveChoiceRe
* @param req request * @param req request
* @returns index dne v týdnu * @returns index dne v týdnu
*/ */
const parseValidateFutureDayIndex = (req: Request<{}, any, IDayIndex>) => { const parseValidateFutureDayIndex = (req: any) => {
if (req.body.dayIndex == null) { if (req.body.dayIndex == null) {
throw Error(`Nebyl předán index dne v týdnu.`); throw Error(`Nebyl předán index dne v týdnu.`);
} }
const todayDayIndex = getDayOfWeekIndex(getToday()); const todayDayIndex = getDayOfWeekIndex(getToday());
const dayIndex = req.body.dayIndex; const dayIndex = parseInt(req.body.dayIndex);
if (isNaN(dayIndex)) { if (isNaN(dayIndex)) {
throw Error(`Neplatný index dne v týdnu: ${req.body.dayIndex}`); throw Error(`Neplatný index dne v týdnu: ${req.body.dayIndex}`);
} }
@ -30,7 +30,7 @@ const parseValidateFutureDayIndex = (req: Request<{}, any, IDayIndex>) => {
const router = express.Router(); const router = express.Router();
router.post("/addChoice", async (req: Request<{}, any, AddChoiceRequest>, res, next) => { router.post("/addChoice", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const trusted = getTrusted(parseToken(req)); const trusted = getTrusted(parseToken(req));
if (req.body.locationIndex > -1) { if (req.body.locationIndex > -1) {
@ -53,7 +53,7 @@ router.post("/addChoice", async (req: Request<{}, any, AddChoiceRequest>, res, n
return res.status(400); // TODO přidat popis chyby return res.status(400); // TODO přidat popis chyby
}); });
router.post("/removeChoices", async (req: Request<{}, any, RemoveChoicesRequest>, res, next) => { router.post("/removeChoices", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const trusted = getTrusted(parseToken(req)); const trusted = getTrusted(parseToken(req));
let date = undefined; let date = undefined;
@ -73,7 +73,7 @@ router.post("/removeChoices", async (req: Request<{}, any, RemoveChoicesRequest>
} catch (e: any) { next(e) } } catch (e: any) { next(e) }
}); });
router.post("/removeChoice", async (req: Request<{}, any, RemoveChoiceRequest>, res, next) => { router.post("/removeChoice", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const trusted = getTrusted(parseToken(req)); const trusted = getTrusted(parseToken(req));
let date = undefined; let date = undefined;
@ -93,7 +93,7 @@ router.post("/removeChoice", async (req: Request<{}, any, RemoveChoiceRequest>,
} catch (e: any) { next(e) } } catch (e: any) { next(e) }
}); });
router.post("/updateNote", async (req: Request<{}, any, UpdateNoteRequest>, res, next) => { router.post("/updateNote", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const trusted = getTrusted(parseToken(req)); const trusted = getTrusted(parseToken(req));
const note = req.body.note; const note = req.body.note;
@ -117,7 +117,7 @@ router.post("/updateNote", async (req: Request<{}, any, UpdateNoteRequest>, res,
} catch (e: any) { next(e) } } catch (e: any) { next(e) }
}); });
router.post("/changeDepartureTime", async (req: Request<{}, any, ChangeDepartureTimeRequest>, res, next) => { router.post("/changeDepartureTime", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
let date = undefined; let date = undefined;
if (req.body.dayIndex != null) { if (req.body.dayIndex != null) {

View File

@ -1,15 +1,14 @@
import express, { Request } from "express"; import express from "express";
import { getLogin } from "../auth"; import { getLogin } from "../auth";
import { createPizzaDay, deletePizzaDay, getPizzaList, addPizzaOrder, removePizzaOrder, lockPizzaDay, unlockPizzaDay, finishPizzaOrder, finishPizzaDelivery, updatePizzaDayNote, updatePizzaFee } from "../pizza"; import { createPizzaDay, deletePizzaDay, getPizzaList, addPizzaOrder, removePizzaOrder, lockPizzaDay, unlockPizzaDay, finishPizzaOrder, finishPizzaDelivery, updatePizzaDayNote, updatePizzaFee } from "../pizza";
import { parseToken } from "../utils"; import { parseToken } from "../utils";
import { getWebsocket } from "../websocket"; import { getWebsocket } from "../websocket";
import { addVolatileData } from "../service"; import { addVolatileData } from "../service";
import { AddPizzaRequest, FinishDeliveryRequest, RemovePizzaRequest, UpdatePizzaDayNoteRequest, UpdatePizzaFeeRequest } from "../../../types";
const router = express.Router(); const router = express.Router();
/** Založí pizza day pro aktuální den, za předpokladu že dosud neexistuje. */ /** Založí pizza day pro aktuální den, za předpokladu že dosud neexistuje. */
router.post("/create", async (req: Request<{}, any, undefined>, res) => { router.post("/create", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await createPizzaDay(login); const data = await createPizzaDay(login);
res.status(200).json(data); res.status(200).json(data);
@ -17,13 +16,13 @@ router.post("/create", async (req: Request<{}, any, undefined>, res) => {
}); });
/** Smaže pizza day pro aktuální den, za předpokladu že existuje. */ /** Smaže pizza day pro aktuální den, za předpokladu že existuje. */
router.post("/delete", async (req: Request<{}, any, undefined>, res) => { router.post("/delete", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await deletePizzaDay(login); const data = await deletePizzaDay(login);
getWebsocket().emit("message", await addVolatileData(data)); getWebsocket().emit("message", await addVolatileData(data));
}); });
router.post("/add", async (req: Request<{}, any, AddPizzaRequest>, res) => { router.post("/add", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
if (isNaN(req.body?.pizzaIndex)) { if (isNaN(req.body?.pizzaIndex)) {
throw Error("Nebyl předán index pizzy"); throw Error("Nebyl předán index pizzy");
@ -48,7 +47,7 @@ router.post("/add", async (req: Request<{}, any, AddPizzaRequest>, res) => {
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/remove", async (req: Request<{}, any, RemovePizzaRequest>, res) => { router.post("/remove", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
if (!req.body?.pizzaOrder) { if (!req.body?.pizzaOrder) {
throw Error("Nebyla předána objednávka"); throw Error("Nebyla předána objednávka");
@ -58,35 +57,35 @@ router.post("/remove", async (req: Request<{}, any, RemovePizzaRequest>, res) =>
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/lock", async (req: Request<{}, any, undefined>, res) => { router.post("/lock", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await lockPizzaDay(login); const data = await lockPizzaDay(login);
getWebsocket().emit("message", await addVolatileData(data)); getWebsocket().emit("message", await addVolatileData(data));
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/unlock", async (req: Request<{}, any, undefined>, res) => { router.post("/unlock", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await unlockPizzaDay(login); const data = await unlockPizzaDay(login);
getWebsocket().emit("message", await addVolatileData(data)); getWebsocket().emit("message", await addVolatileData(data));
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/finishOrder", async (req: Request<{}, any, undefined>, res) => { router.post("/finishOrder", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await finishPizzaOrder(login); const data = await finishPizzaOrder(login);
getWebsocket().emit("message", await addVolatileData(data)); getWebsocket().emit("message", await addVolatileData(data));
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/finishDelivery", async (req: Request<{}, any, FinishDeliveryRequest>, res) => { router.post("/finishDelivery", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await finishPizzaDelivery(login, req.body.bankAccount, req.body.bankAccountHolder); const data = await finishPizzaDelivery(login, req.body.bankAccount, req.body.bankAccountHolder);
getWebsocket().emit("message", await addVolatileData(data)); getWebsocket().emit("message", await addVolatileData(data));
res.status(200).json({}); res.status(200).json({});
}); });
router.post("/updatePizzaDayNote", async (req: Request<{}, any, UpdatePizzaDayNoteRequest>, res, next) => { router.post("/updatePizzaDayNote", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
try { try {
if (req.body.note && req.body.note.length > 70) { if (req.body.note && req.body.note.length > 70) {
@ -98,7 +97,7 @@ router.post("/updatePizzaDayNote", async (req: Request<{}, any, UpdatePizzaDayNo
} catch (e: any) { next(e) } } catch (e: any) { next(e) }
}); });
router.post("/updatePizzaFee", async (req: Request<{}, any, UpdatePizzaFeeRequest>, res, next) => { router.post("/updatePizzaFee", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
if (!req.body.login) { if (!req.body.login) {
return res.status(400).json({ error: "Nebyl předán login cílového uživatele" }); return res.status(400).json({ error: "Nebyl předán login cílového uživatele" });

View File

@ -1,18 +1,17 @@
import express, { Request, Response } from "express"; import express from "express";
import { getLogin } from "../auth"; import { getLogin } from "../auth";
import { parseToken } from "../utils"; import { parseToken } from "../utils";
import { getUserVotes, updateFeatureVote } from "../voting"; import { getUserVotes, updateFeatureVote } from "../voting";
import { FeatureRequest, UpdateFeatureVoteRequest } from "../../../types";
const router = express.Router(); const router = express.Router();
router.get("/getVotes", async (req: Request<{}, any, undefined>, res: Response<FeatureRequest[]>) => { router.get("/getVotes", async (req, res) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
const data = await getUserVotes(login); const data = await getUserVotes(login);
res.status(200).json(data); res.status(200).json(data);
}); });
router.post("/updateVote", async (req: Request<{}, any, UpdateFeatureVoteRequest>, res, next) => { router.post("/updateVote", async (req, res, next) => {
const login = getLogin(parseToken(req)); const login = getLogin(parseToken(req));
if (req.body?.option == null || req.body?.active == null) { if (req.body?.option == null || req.body?.active == null) {
res.status(400).json({ error: "Chybné parametry volání" }); res.status(400).json({ error: "Chybné parametry volání" });

View File

@ -192,19 +192,19 @@ export async function initIfNeeded(date?: Date) {
* *
* @param login login uživatele * @param login login uživatele
* @param trusted příznak, zda se jedná o ověřeného uživatele * @param trusted příznak, zda se jedná o ověřeného uživatele
* @param locationIndex vybrané "umístění" * @param location vybrané "umístění"
* @param date datum, ke kterému se volba vztahuje * @param date datum, ke kterému se volba vztahuje
* @returns * @returns
*/ */
export async function removeChoices(login: string, trusted: boolean, locationIndex: number, date?: Date) { export async function removeChoices(login: string, trusted: boolean, location: Locations, date?: Date) {
const selectedDay = formatDate(date ?? getToday()); const selectedDay = formatDate(date ?? getToday());
let data: DayData = await storage.getData(selectedDay); let data: DayData = await storage.getData(selectedDay);
validateTrusted(data, login, trusted); validateTrusted(data, login, trusted);
if (locationIndex in data.choices) { if (location in data.choices) {
if (login in data.choices[locationIndex]) { if (login in data.choices[location]) {
delete data.choices[locationIndex][login] delete data.choices[location][login]
if (Object.keys(data.choices[locationIndex]).length === 0) { if (Object.keys(data.choices[location]).length === 0) {
delete data.choices[locationIndex] delete data.choices[location]
} }
await storage.setData(selectedDay, data); await storage.setData(selectedDay, data);
} }
@ -218,20 +218,20 @@ export async function removeChoices(login: string, trusted: boolean, locationInd
* *
* @param login login uživatele * @param login login uživatele
* @param trusted příznak, zda se jedná o ověřeného uživatele * @param trusted příznak, zda se jedná o ověřeného uživatele
* @param locationIndex vybrané "umístění" * @param location vybrané "umístění"
* @param foodIndex index jídla v jídelním lístku daného umístění, pokud existuje * @param foodIndex index jídla v jídelním lístku daného umístění, pokud existuje
* @param date datum, ke kterému se volba vztahuje * @param date datum, ke kterému se volba vztahuje
* @returns * @returns
*/ */
export async function removeChoice(login: string, trusted: boolean, locationIndex: number, foodIndex: number, date?: Date) { export async function removeChoice(login: string, trusted: boolean, location: Locations, foodIndex: number, date?: Date) {
const selectedDay = formatDate(date ?? getToday()); const selectedDay = formatDate(date ?? getToday());
let data: DayData = await storage.getData(selectedDay); let data: DayData = await storage.getData(selectedDay);
validateTrusted(data, login, trusted); validateTrusted(data, login, trusted);
if (locationIndex in data.choices) { if (location in data.choices) {
if (login in data.choices[locationIndex]) { if (login in data.choices[location]) {
const index = data.choices[locationIndex][login].options.indexOf(foodIndex); const index = data.choices[location][login].options.indexOf(foodIndex);
if (index > -1) { if (index > -1) {
data.choices[locationIndex][login].options.splice(index, 1) data.choices[location][login].options.splice(index, 1)
await storage.setData(selectedDay, data); await storage.setData(selectedDay, data);
} }
} }
@ -285,13 +285,13 @@ function validateTrusted(data: ClientData, login: string, trusted: boolean) {
* *
* @param login login uživatele * @param login login uživatele
* @param trusted příznak, zda se jedná o ověřeného uživatele * @param trusted příznak, zda se jedná o ověřeného uživatele
* @param locationIndex vybrané "umístění" * @param location vybrané "umístění"
* @param foodIndex volitelný index jídla v daném umístění * @param foodIndex volitelný index jídla v daném umístění
* @param trusted příznak, zda se jedná o ověřeného uživatele * @param trusted příznak, zda se jedná o ověřeného uživatele
* @param date datum, ke kterému se volba vztahuje * @param date datum, ke kterému se volba vztahuje
* @returns aktuální data * @returns aktuální data
*/ */
export async function addChoice(login: string, trusted: boolean, locationIndex: number, foodIndex?: number, date?: Date) { export async function addChoice(login: string, trusted: boolean, location: Locations, foodIndex?: number, date?: Date) {
const usedDate = date ?? getToday(); const usedDate = date ?? getToday();
await initIfNeeded(usedDate); await initIfNeeded(usedDate);
const selectedDate = formatDate(usedDate); const selectedDate = formatDate(usedDate);
@ -301,17 +301,17 @@ export async function addChoice(login: string, trusted: boolean, locationIndex:
if (foodIndex == null) { if (foodIndex == null) {
data = await removeChoiceIfPresent(login, selectedDate); data = await removeChoiceIfPresent(login, selectedDate);
} }
if (!(locationIndex in data.choices)) { if (!(location in data.choices)) {
data.choices[locationIndex] = {}; data.choices[location] = {};
} }
if (!(login in data.choices[locationIndex])) { if (!(login in data.choices[location])) {
data.choices[locationIndex][login] = { data.choices[location][login] = {
trusted, trusted,
options: [] options: []
}; };
} }
if (foodIndex != null && !data.choices[locationIndex][login].options.includes(foodIndex)) { if (foodIndex != null && !data.choices[location][login].options.includes(foodIndex)) {
data.choices[locationIndex][login].options.push(foodIndex); data.choices[location][login].options.push(foodIndex);
} }
await storage.setData(selectedDate, data); await storage.setData(selectedDate, data);
return data; return data;

View File

@ -1,56 +0,0 @@
import { FeatureRequest, PizzaOrder } from "./Types";
export interface IDayIndex {
dayIndex?: number,
}
export interface AddChoiceRequest extends IDayIndex {
locationIndex: number,
foodIndex?: number,
}
export interface RemoveChoicesRequest extends IDayIndex {
locationIndex: number,
}
export interface RemoveChoiceRequest extends IDayIndex {
locationIndex: number,
foodIndex: number,
}
export interface UpdateNoteRequest extends IDayIndex {
note?: string,
}
export interface ChangeDepartureTimeRequest extends IDayIndex {
time: string,
}
export interface FinishDeliveryRequest {
bankAccount?: string,
bankAccountHolder?: string,
}
export interface AddPizzaRequest {
pizzaIndex: number,
pizzaSizeIndex: number,
}
export interface RemovePizzaRequest {
pizzaOrder: PizzaOrder,
}
export interface UpdatePizzaDayNoteRequest {
note?: string,
}
export interface UpdatePizzaFeeRequest {
login: string,
text?: string,
price?: number,
}
export interface UpdateFeatureVoteRequest {
option: FeatureRequest,
active: boolean,
}

View File

@ -1,2 +1 @@
export * from './Types'; export * from './Types';
export * from './RequestTypes';