Prvotní nástřel fungující aplikace

This commit is contained in:
Martin Berka
2023-06-01 23:05:51 +02:00
parent bf379e13ed
commit 12583e6efb
59 changed files with 2194 additions and 1011 deletions

105
server/src/service.ts Normal file
View File

@@ -0,0 +1,105 @@
import { ClientData, Locations } from "./types";
import { db } from "./database";
import { getTodayString } from "./utils";
import { getDate } from "./utils";
// /** Jedna konkrétní pizza */
// interface Pizza {
// name: string, // název pizzy
// size: number, // velikost pizzy v cm
// price: number, // cena pizzy v Kč, včetně krabice
// }
// /** Objednávka jednoho člověka */
// interface Order {
// customer: string, // název člověka
// pizzaList: Pizza[], // seznam objednaných pizz
// totalPrice: number, // celková cena všech objednaných pizz a krabic
// }
// /** Stav pizza dne. */
// enum State {
// NOT_CREATED, // Pizza day nebyl založen
// CREATED, // Pizza day je založen
// LOCKED // Objednávky uzamčeny
// }
// /** Veškerá data pro zobrazení na klientovi */
// interface ClientData {
// date: string, // dnešní datum pro zobrazení
// state: State, // stav pizza dne
// orders?: Order[], // seznam objednávek, pokud není vyplněno, není založen pizza day
// }
/** Vrátí "prázdná" (implicitní) data, pokud ještě nikdo nehlasoval. */
function getEmptyData(): ClientData {
return { date: getTodayString(), choices: {} };
}
/**
* Vrátí veškerá klientská data pro aktuální den.
*/
export function getData(): ClientData {
const data = db.get(getDate()) || getEmptyData();
console.log("Vracím data pro dnešní den", data); // TODO smazat
return data;
}
// /**
// * Vytvoří pizza day pro aktuální den a vrátí data pro klienta.
// */
// export function createPizzaDay(): ClientData {
// const today = getDate();
// if (db.has(today)) {
// throw Error("Pizza day pro dnešní den již existuje");
// }
// const data = { date: getTodayString(), state: State.CREATED, orders: [] };
// db.set(today, data);
// return data;
// }
// /**
// * Smaže pizza day pro aktuální den.
// */
// export function deletePizzaDay() {
// const today = getDate();
// if (!db.has(today)) {
// throw Error("Pizza day pro dnešní den neexistuje");
// }
// db.delete(today);
// }
export function initIfNeeded() {
const today = getDate();
if (!db.has(today)) {
db.set(today, getEmptyData());
}
}
export function removeChoice(login: string, data: ClientData) {
for (let key of Object.keys(data.choices)) {
if (data.choices[key] && data.choices[key].includes(login)) {
const index = data.choices[key].indexOf(login);
data.choices[key].splice(index, 1);
if (data.choices[key].length == 0) {
delete data.choices[key];
}
}
}
return data;
}
export function updateChoice(login: string, choice: Locations | null) {
initIfNeeded();
const today = getDate();
let data: ClientData = db.get(today);
data = removeChoice(login, data);
if (choice !== null) {
if (!data.choices?.[choice]) {
data.choices[choice] = [];
}
data.choices[choice].push(login);
}
db.set(today, data);
return data;
}