From 862614ae9dfe2220e8946e73b5c44e23750ac50f Mon Sep 17 00:00:00 2001 From: Martin Berka Date: Sun, 24 Sep 2023 08:08:41 +0200 Subject: [PATCH] =?UTF-8?q?Refaktor,=20odd=C4=9Blen=C3=AD=20Pizza=20Day=20?= =?UTF-8?q?do=20vlastn=C3=AD=20servisky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/Api.ts | 4 +- client/src/App.tsx | 4 +- server/src/index.ts | 8 +- server/src/pizza.ts | 272 ++++++++++++++++++++++++++++++++++++++++++ server/src/service.ts | 263 +--------------------------------------- 5 files changed, 282 insertions(+), 269 deletions(-) create mode 100644 server/src/pizza.ts diff --git a/client/src/Api.ts b/client/src/Api.ts index 4d8be45..bbfa744 100644 --- a/client/src/Api.ts +++ b/client/src/Api.ts @@ -96,8 +96,8 @@ export const removePizza = async (pizzaOrder: PizzaOrder) => { return await api.post('/api/removePizza', JSON.stringify({ pizzaOrder })); } -export const updateNote = async (note?: string) => { - return await api.post('/api/updateNote', JSON.stringify({ note })); +export const updatePizzaDayNote = async (note?: string) => { + return await api.post('/api/updatePizzaDayNote', JSON.stringify({ note })); } export const login = async (login?: string) => { diff --git a/client/src/App.tsx b/client/src/App.tsx index 5bcda7a..c62a387 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,7 +1,7 @@ import React, { useContext, useEffect, useMemo, useRef, useState, useCallback } from 'react'; import 'bootstrap/dist/css/bootstrap.min.css'; import { EVENT_DISCONNECT, EVENT_MESSAGE, SocketContext } from './context/socket'; -import { addChoice, addPizza, changeDepartureTime, createPizzaDay, deletePizzaDay, errorHandler, finishDelivery, finishOrder, getData, getQrUrl, lockPizzaDay, removeChoice, removeChoices, removePizza, unlockPizzaDay, updateNote } from './Api'; +import { addChoice, addPizza, changeDepartureTime, createPizzaDay, deletePizzaDay, errorHandler, finishDelivery, finishOrder, getData, getQrUrl, lockPizzaDay, removeChoice, removeChoices, removePizza, unlockPizzaDay, updatePizzaDayNote } from './Api'; import { useAuth } from './context/auth'; import Login from './Login'; import { Alert, Button, Col, Form, Row, Table } from 'react-bootstrap'; @@ -255,7 +255,7 @@ function App() { alert("Poznámka může mít maximálně 100 znaků"); return; } - updateNote(poznamkaRef.current?.value); + updatePizzaDayNote(poznamkaRef.current?.value); } // const addToCart = async () => { diff --git a/server/src/index.ts b/server/src/index.ts index afda2e1..d23ce63 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -2,7 +2,8 @@ import express from "express"; import { Server } from "socket.io"; import bodyParser from "body-parser"; import cors from 'cors'; -import { addChoice, addPizzaOrder, createPizzaDay, deletePizzaDay, finishPizzaDelivery, finishPizzaOrder, getData, getDateForWeekIndex, getPizzaList, getToday, lockPizzaDay, removeChoice, removeChoices, removePizzaOrder, unlockPizzaDay, updateDepartureTime, updateNote } from "./service"; +import { addChoice, getData, getDateForWeekIndex, getToday, removeChoice, removeChoices, updateDepartureTime } from "./service"; +import { addPizzaOrder, createPizzaDay, deletePizzaDay, finishPizzaDelivery, finishPizzaOrder, getPizzaList, lockPizzaDay, removePizzaOrder, unlockPizzaDay, updatePizzaDayNote } from "./pizza"; import dotenv from 'dotenv'; import path from 'path'; import { getQr } from "./qr"; @@ -282,13 +283,12 @@ app.post("/api/removeChoice", async (req, res, next) => { } catch (e: any) { next(e) } }); -// TODO přejmenovat, ať je jasné, že to patří k Pizza day -app.post("/api/updateNote", async (req, res) => { +app.post("/api/updatePizzaDayNote", async (req, res) => { const login = getLogin(parseToken(req)); if (req.body.note && req.body.note.length > 100) { throw Error("Poznámka může mít maximálně 100 znaků"); } - const data = await updateNote(login, req.body.note); + const data = await updatePizzaDayNote(login, req.body.note); io.emit("message", data); res.status(200).json(data); }); diff --git a/server/src/pizza.ts b/server/src/pizza.ts new file mode 100644 index 0000000..c806fd3 --- /dev/null +++ b/server/src/pizza.ts @@ -0,0 +1,272 @@ +import { formatDate } from "./utils"; +import { callNotifikace } from "./notifikace"; +import { generateQr } from "./qr"; +import { ClientData, PizzaDayState, UdalostEnum, Pizza, PizzaSize, Order, PizzaOrder } from "../../types"; +import getStorage from "./storage"; +import { downloadPizzy } from "./chefie"; +import { getToday, initIfNeeded } from "./service"; + +const storage = getStorage(); + +/** + * Vrátí seznam dostupných pizz pro dnešní den. + * Stáhne je, pokud je pro dnešní den nemá. + */ +export async function getPizzaList(): Promise { + await initIfNeeded(); + const today = formatDate(getToday()); + let clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaList) { + clientData = await savePizzaList(await downloadPizzy()); + } + return Promise.resolve(clientData.pizzaList); +} + +/** + * Uloží seznam dostupných pizz pro dnešní den. + * + * @param pizzaList seznam dostupných pizz + */ +export async function savePizzaList(pizzaList: Pizza[]): Promise { + await initIfNeeded(); + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + clientData.pizzaList = pizzaList; + clientData.pizzaListLastUpdate = new Date(); + await storage.setData(today, clientData); + return clientData; +} + +/** + * Vytvoří pizza day pro aktuální den a vrátí data pro klienta. + */ +export async function createPizzaDay(creator: string): Promise { + await initIfNeeded(); + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den již existuje"); + } + // TODO berka rychlooprava, vyřešit lépe - stahovat jednou, na jediném místě! + const pizzaList = await getPizzaList(); + const data: ClientData = { pizzaDay: { state: PizzaDayState.CREATED, creator, orders: [] }, pizzaList, ...clientData }; + await storage.setData(today, data); + callNotifikace({ input: { udalost: UdalostEnum.ZAHAJENA_PIZZA, user: creator } }) + return data; +} + +/** + * Smaže pizza day pro aktuální den. + */ +export async function deletePizzaDay(login: string): Promise { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.creator !== login) { + throw Error("Login uživatele se neshoduje se zakladatelem Pizza Day"); + } + delete clientData.pizzaDay; + await storage.setData(today, clientData); + return clientData; +} + +/** + * Přidá objednávku pizzy uživateli. + * + * @param login login uživatele + * @param pizza zvolená pizza + * @param size zvolená velikost pizzy + */ +export async function addPizzaOrder(login: string, pizza: Pizza, size: PizzaSize) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.state !== PizzaDayState.CREATED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED); + } + let order: Order | undefined = clientData.pizzaDay.orders.find(o => o.customer === login); + if (!order) { + order = { + customer: login, + pizzaList: [], + totalPrice: 0, + } + clientData.pizzaDay.orders.push(order); + } + const pizzaOrder: PizzaOrder = { + varId: size.varId, + name: pizza.name, + size: size.size, + price: size.price, + } + order.pizzaList.push(pizzaOrder); + order.totalPrice += pizzaOrder.price; + await storage.setData(today, clientData); + return clientData; +} + +/** + * Odstraní danou objednávku pizzy. + * + * @param login login uživatele + * @param pizzaOrder objednávka pizzy + */ +export async function removePizzaOrder(login: string, pizzaOrder: PizzaOrder) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + const orderIndex = clientData.pizzaDay.orders.findIndex(o => o.customer === login); + if (orderIndex < 0) { + throw Error("Nebyly nalezeny žádné objednávky pro uživatele " + login); + } + const order = clientData.pizzaDay.orders[orderIndex]; + const index = order.pizzaList.findIndex(o => o.name === pizzaOrder.name && o.size === pizzaOrder.size); + if (index < 0) { + throw Error("Objednávka s danými parametry nebyla nalezena"); + } + const price = order.pizzaList[index].price; + order.pizzaList.splice(index, 1); + order.totalPrice -= price; + if (order.pizzaList.length == 0) { + clientData.pizzaDay.orders.splice(orderIndex, 1); + } + await storage.setData(today, clientData); + return clientData; +} + +/** + * Uzamkne možnost editovat objednávky pizzy. + * + * @param login login uživatele + * @returns aktuální data pro uživatele + */ +export async function lockPizzaDay(login: string) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.creator !== login) { + throw Error("Pizza day není spravován uživatelem " + login); + } + if (clientData.pizzaDay.state !== PizzaDayState.CREATED && clientData.pizzaDay.state !== PizzaDayState.ORDERED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED + " nebo " + PizzaDayState.ORDERED); + } + clientData.pizzaDay.state = PizzaDayState.LOCKED; + await storage.setData(today, clientData); + return clientData; +} + +/** + * Odekmne možnost editovat objednávky pizzy. + * + * @param login login uživatele + * @returns aktuální data pro uživatele + */ +export async function unlockPizzaDay(login: string) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.creator !== login) { + throw Error("Pizza day není spravován uživatelem " + login); + } + if (clientData.pizzaDay.state !== PizzaDayState.LOCKED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.LOCKED); + } + clientData.pizzaDay.state = PizzaDayState.CREATED; + await storage.setData(today, clientData); + return clientData; +} + +/** + * Nastaví stav pizza day na "pizzy objednány". + * + * @param login login uživatele + * @returns aktuální data pro uživatele + */ +export async function finishPizzaOrder(login: string) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.creator !== login) { + throw Error("Pizza day není spravován uživatelem " + login); + } + if (clientData.pizzaDay.state !== PizzaDayState.LOCKED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.LOCKED); + } + clientData.pizzaDay.state = PizzaDayState.ORDERED; + await storage.setData(today, clientData); + callNotifikace({ input: { udalost: UdalostEnum.OBJEDNANA_PIZZA, user: clientData?.pizzaDay?.creator } }) + return clientData; +} + +/** + * Nastaví stav pizza day na "pizzy doručeny". + * Vygeneruje QR kódy pro všechny objednatele, pokud objednávající má vyplněné číslo účtu a jméno. + * + * @param login login uživatele + * @returns aktuální data pro uživatele + */ +export async function finishPizzaDelivery(login: string, bankAccount?: string, bankAccountHolder?: string) { + const today = formatDate(getToday()); + const clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.creator !== login) { + throw Error("Pizza day není spravován uživatelem " + login); + } + if (clientData.pizzaDay.state !== PizzaDayState.ORDERED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.ORDERED); + } + clientData.pizzaDay.state = PizzaDayState.DELIVERED; + + // Vygenerujeme QR kód, pokud k tomu máme data + if (bankAccount?.length && bankAccountHolder?.length) { + for (const order of clientData.pizzaDay.orders) { + if (order.customer !== login) { // zatím platí creator = objednávající, a pro toho nemá QR kód smysl + let message = order.pizzaList.map(pizza => `Pizza ${pizza.name} (${pizza.size})`).join(', '); + const price = order.pizzaList.map(pizza => pizza.price).reduce((partial, a) => partial + a, 0); + await generateQr(order.customer, bankAccount, bankAccountHolder, price, message); + order.hasQr = true; + } + } + } + await storage.setData(today, clientData); + return clientData; +} + +/** + * Aktualizuje poznámku k Pizza day uživatele. + * + * @param login přihlašovací jméno uživatele + * @param note nová poznámka k Pizza day + * @returns aktuální klientská data + */ +export async function updatePizzaDayNote(login: string, note?: string) { + const today = formatDate(getToday()); + let clientData: ClientData = await storage.getData(today); + if (!clientData.pizzaDay) { + throw Error("Pizza day pro dnešní den neexistuje"); + } + if (clientData.pizzaDay.state !== PizzaDayState.CREATED) { + throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED); + } + const myOrder = clientData.pizzaDay.orders.find(o => o.customer === login); + if (!myOrder || !myOrder.pizzaList.length) { + throw Error("Pizza day neobsahuje žádné objednávky uživatele " + login); + } + myOrder.note = note; + await storage.setData(today, clientData); + return clientData; +} diff --git a/server/src/service.ts b/server/src/service.ts index 04cd317..e79bcaa 100644 --- a/server/src/service.ts +++ b/server/src/service.ts @@ -1,10 +1,7 @@ import { InsufficientPermissions, formatDate, getDayOfWeekIndex, getHumanDate, getHumanTime, getIsWeekend } from "./utils"; -import { callNotifikace } from "./notifikace"; -import { generateQr } from "./qr"; -import { ClientData, PizzaDayState, UdalostEnum, Pizza, PizzaSize, Order, PizzaOrder, Locations, Restaurants, Menu } from "../../types"; +import { ClientData, Locations, Restaurants, Menu } from "../../types"; import getStorage from "./storage"; import { getMenuSladovnicka, getMenuTechTower, getMenuUMotliku } from "./restaurants"; -import { downloadPizzy } from "./chefie"; import { getTodayMock } from "./mock"; const storage = getStorage(); @@ -53,35 +50,7 @@ export async function getData(date?: Date): Promise { return data; } -/** - * Vrátí seznam dostupných pizz pro dnešní den. - * Stáhne je, pokud je pro dnešní den nemá. - */ -export async function getPizzaList(): Promise { - await initIfNeeded(); - const today = formatDate(getToday()); - let clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaList) { - clientData = await savePizzaList(await downloadPizzy()); - } - return Promise.resolve(clientData.pizzaList); -} - -/** - * Uloží seznam dostupných pizz pro dnešní den. - * - * @param pizzaList seznam dostupných pizz - */ -export async function savePizzaList(pizzaList: Pizza[]): Promise { - await initIfNeeded(); - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - clientData.pizzaList = pizzaList; - clientData.pizzaListLastUpdate = new Date(); - await storage.setData(today, clientData); - return clientData; -} - +// TODO přesun do restaurants.ts /** * Vrátí menu dané restaurace pro předaný den. Pokud neexistuje, provede jeho stažení a uložení do DB. * @@ -124,215 +93,6 @@ export async function getRestaurantMenu(restaurant: Restaurants, date?: Date): P return clientData.menus[restaurant]!; } -/** - * Vytvoří pizza day pro aktuální den a vrátí data pro klienta. - */ -export async function createPizzaDay(creator: string): Promise { - await initIfNeeded(); - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den již existuje"); - } - // TODO berka rychlooprava, vyřešit lépe - stahovat jednou, na jediném místě! - const pizzaList = await getPizzaList(); - const data: ClientData = { pizzaDay: { state: PizzaDayState.CREATED, creator, orders: [] }, pizzaList, ...clientData }; - await storage.setData(today, data); - callNotifikace({ input: { udalost: UdalostEnum.ZAHAJENA_PIZZA, user: creator } }) - return data; -} - -/** - * Smaže pizza day pro aktuální den. - */ -export async function deletePizzaDay(login: string): Promise { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.creator !== login) { - throw Error("Login uživatele se neshoduje se zakladatelem Pizza Day"); - } - delete clientData.pizzaDay; - await storage.setData(today, clientData); - return clientData; -} - -/** - * Přidá objednávku pizzy uživateli. - * - * @param login login uživatele - * @param pizza zvolená pizza - * @param size zvolená velikost pizzy - */ -export async function addPizzaOrder(login: string, pizza: Pizza, size: PizzaSize) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.state !== PizzaDayState.CREATED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED); - } - let order: Order | undefined = clientData.pizzaDay.orders.find(o => o.customer === login); - if (!order) { - order = { - customer: login, - pizzaList: [], - totalPrice: 0, - } - clientData.pizzaDay.orders.push(order); - } - const pizzaOrder: PizzaOrder = { - varId: size.varId, - name: pizza.name, - size: size.size, - price: size.price, - } - order.pizzaList.push(pizzaOrder); - order.totalPrice += pizzaOrder.price; - await storage.setData(today, clientData); - return clientData; -} - -/** - * Odstraní danou objednávku pizzy. - * - * @param login login uživatele - * @param pizzaOrder objednávka pizzy - */ -export async function removePizzaOrder(login: string, pizzaOrder: PizzaOrder) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - const orderIndex = clientData.pizzaDay.orders.findIndex(o => o.customer === login); - if (orderIndex < 0) { - throw Error("Nebyly nalezeny žádné objednávky pro uživatele " + login); - } - const order = clientData.pizzaDay.orders[orderIndex]; - const index = order.pizzaList.findIndex(o => o.name === pizzaOrder.name && o.size === pizzaOrder.size); - if (index < 0) { - throw Error("Objednávka s danými parametry nebyla nalezena"); - } - const price = order.pizzaList[index].price; - order.pizzaList.splice(index, 1); - order.totalPrice -= price; - if (order.pizzaList.length == 0) { - clientData.pizzaDay.orders.splice(orderIndex, 1); - } - await storage.setData(today, clientData); - return clientData; -} - -/** - * Uzamkne možnost editovat objednávky pizzy. - * - * @param login login uživatele - * @returns aktuální data pro uživatele - */ -export async function lockPizzaDay(login: string) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.creator !== login) { - throw Error("Pizza day není spravován uživatelem " + login); - } - if (clientData.pizzaDay.state !== PizzaDayState.CREATED && clientData.pizzaDay.state !== PizzaDayState.ORDERED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED + " nebo " + PizzaDayState.ORDERED); - } - clientData.pizzaDay.state = PizzaDayState.LOCKED; - await storage.setData(today, clientData); - return clientData; -} - -/** - * Odekmne možnost editovat objednávky pizzy. - * - * @param login login uživatele - * @returns aktuální data pro uživatele - */ -export async function unlockPizzaDay(login: string) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.creator !== login) { - throw Error("Pizza day není spravován uživatelem " + login); - } - if (clientData.pizzaDay.state !== PizzaDayState.LOCKED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.LOCKED); - } - clientData.pizzaDay.state = PizzaDayState.CREATED; - await storage.setData(today, clientData); - return clientData; -} - -/** - * Nastaví stav pizza day na "pizzy objednány". - * - * @param login login uživatele - * @returns aktuální data pro uživatele - */ -export async function finishPizzaOrder(login: string) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.creator !== login) { - throw Error("Pizza day není spravován uživatelem " + login); - } - if (clientData.pizzaDay.state !== PizzaDayState.LOCKED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.LOCKED); - } - clientData.pizzaDay.state = PizzaDayState.ORDERED; - await storage.setData(today, clientData); - callNotifikace({ input: { udalost: UdalostEnum.OBJEDNANA_PIZZA, user: clientData?.pizzaDay?.creator } }) - return clientData; -} - -/** - * Nastaví stav pizza day na "pizzy doručeny". - * Vygeneruje QR kódy pro všechny objednatele, pokud objednávající má vyplněné číslo účtu a jméno. - * - * @param login login uživatele - * @returns aktuální data pro uživatele - */ -export async function finishPizzaDelivery(login: string, bankAccount?: string, bankAccountHolder?: string) { - const today = formatDate(getToday()); - const clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.creator !== login) { - throw Error("Pizza day není spravován uživatelem " + login); - } - if (clientData.pizzaDay.state !== PizzaDayState.ORDERED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.ORDERED); - } - clientData.pizzaDay.state = PizzaDayState.DELIVERED; - - // Vygenerujeme QR kód, pokud k tomu máme data - if (bankAccount?.length && bankAccountHolder?.length) { - for (const order of clientData.pizzaDay.orders) { - if (order.customer !== login) { // zatím platí creator = objednávající, a pro toho nemá QR kód smysl - let message = order.pizzaList.map(pizza => `Pizza ${pizza.name} (${pizza.size})`).join(', '); - const price = order.pizzaList.map(pizza => pizza.price).reduce((partial, a) => partial + a, 0); - await generateQr(order.customer, bankAccount, bankAccountHolder, price, message); - order.hasQr = true; - } - } - } - await storage.setData(today, clientData); - return clientData; -} - export async function initIfNeeded(date?: Date) { const usedDate = formatDate(date ?? getToday()); const hasData = await storage.hasData(usedDate); @@ -470,25 +230,6 @@ export async function addChoice(login: string, trusted: boolean, location: Locat return data; } -// TODO přejmenovat, ať je jasné že to patří k pizza day -export async function updateNote(login: string, note?: string) { - const today = formatDate(getToday()); - let clientData: ClientData = await storage.getData(today); - if (!clientData.pizzaDay) { - throw Error("Pizza day pro dnešní den neexistuje"); - } - if (clientData.pizzaDay.state !== PizzaDayState.CREATED) { - throw Error("Pizza day není ve stavu " + PizzaDayState.CREATED); - } - const myOrder = clientData.pizzaDay.orders.find(o => o.customer === login); - if (!myOrder || !myOrder.pizzaList.length) { - throw Error("Pizza day neobsahuje žádné objednávky uživatele " + login); - } - myOrder.note = note; - await storage.setData(today, clientData); - return clientData; -} - /** * Aktualizuje preferovaný čas odchodu strávníka. *