/** Výčtový typ pro restaurace, pro které umíme získat a parsovat obědové menu. */ export enum Restaurants { SLADOVNICKA = 'sladovnicka', UMOTLIKU = 'uMotliku', TECHTOWER = 'techTower', } export interface FoodChoices { trusted: boolean, options: number[], departureTime?: string, } export interface Choices { [location: string]: { [login: string]: FoodChoices }, } /** Velikost konkrétní pizzy */ export interface PizzaSize { varId: number, // unikátní ID varianty pizzy size: string, // velikost pizzy, např. "30cm" pizzaPrice: number, // cena samotné pizzy boxPrice: number, // cena krabice price: number, // celková cena (pizza + krabice) } /** Jedna konkrétní pizza */ export interface Pizza { name: string, // název pizzy ingredients: string[], // seznam ingrediencí sizes: PizzaSize[], // dostupné velikosti pizzy } /** Objednávka jedné konkrétní pizzy */ export interface PizzaOrder { varId: number, // unikátní ID varianty pizzy name: string, // název pizzy size: string, // velikost pizzy jako string (30cm) price: number, // cena pizzy v Kč, včetně krabice } /** Celková objednávka jednoho člověka */ export interface Order { customer: string, // jméno objednatele pizzaList: PizzaOrder[], // seznam objednaných pizz totalPrice: number, // celková cena všech objednaných pizz a krabic hasQr?: boolean, // true, pokud je k objednávce vygenerován QR kód pro platbu note?: string, // volitelná uživatelská poznámka k objednávce } /** Stav pizza dne */ export enum PizzaDayState { NOT_CREATED, // Pizza day nebyl založen CREATED, // Pizza day je založen LOCKED, // Objednávky uzamčeny ORDERED, // Pizzy objednány DELIVERED // Pizzy doručeny } /** Informace o pizza day pro dnešní den */ interface PizzaDay { state: PizzaDayState, // stav pizza dne creator: string, // jméno zakladatele orders: Order[], // seznam objednávek jednotlivých lidí } /** Veškerá data pro zobrazení na klientovi */ export interface ClientData { date: string, // dnešní datum pro zobrazení isWeekend: boolean, // příznak, zda je dnes víkend choices: Choices, // seznam voleb menus?: { [restaurant: string]: Menu }, // menu jednotlivých restaurací pizzaDay?: PizzaDay, // pizza day pro dnešní den, pokud existuje pizzaList?: Pizza[], // seznam dostupných pizz pro dnešní den pizzaListLastUpdate?: Date, // datum a čas poslední aktualizace pizz } /** Nabídka jídel jednoho podniku. */ export interface Menu { lastUpdate: string, // human-readable čas poslední aktualizace menu closed: boolean, // příznak, zda je daný podnik aktuálně zavřený food: Food[], // seznam jídel v menu } /** Jídlo z obědového menu restaurace. */ export interface Food { amount?: string, // množství standardní porce, např. 0,33l nebo 150g name: string, // název/popis jídla price: string, // cena ve formátu '135 Kč' isSoup: boolean, // příznak, zda se jedná o polévku } // TODO tohle je dost špatné pojmenování, vzhledem k tomu co to obsahuje export enum Locations { SLADOVNICKA = 'Sladovnická', UMOTLIKU = 'U Motlíků', TECHTOWER = 'TechTower', SPSE = 'SPŠE', PIZZA = 'Pizza day', OBJEDNAVAM = 'Budu objednávat', NEOBEDVAM = 'Mám vlastní/neobědvám', } export enum UdalostEnum { ZAHAJENA_PIZZA = "Zahájen pizza day", OBJEDNANA_PIZZA = "Objednána pizza" } export interface NotififaceInput { udalost: UdalostEnum, user: string, } export interface NotifikaceData { input: NotififaceInput, gotify?: boolean, teams?: boolean, } export interface GotifyServer { server: string; api_keys: string[]; }