/** 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 fee?: { text?: string, price: number }, // příplatek (např. za extra ingredience) totalPrice: number, // celková cena všech objednaných pizz, krabic a příplatků 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, // datum vybraného dne pro zobrazení isWeekend: boolean, // příznak, zda je zvolené datum víkend weekIndex: number, // index zvoleného dne v týdnu (0-6) todayWeekIndex?: number, // index dnešního dne v týdnu (0-6) choices: Choices, // seznam voleb departureTimes: DepartureTime[], // seznam možných časů odchodu menus?: { [restaurant in Restaurants]?: 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[]; } /** Čas preferovaného odchodu na oběd. */ export enum DepartureTime { T10_00 = "10:00", T10_15 = "10:15", T10_30 = "10:30", T10_45 = "10:45", T11_00 = "11:00", T11_15 = "11:15", T11_30 = "11:30", T11_45 = "11:45", T12_00 = "12:00", T12_15 = "12:15", T12_30 = "12:30", T12_45 = "12:45", T13_00 = "13:00", }