/** 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í } /** Týdenní menu jednotlivých restaurací. */ export interface WeekMenu { [dayIndex: number]: { [restaurant in Restaurants]?: DayMenu } } /** Data vztahující se k jednomu konkrétnímu dni. */ export interface DayData { date: string, // datum dne isWeekend: boolean, // příznak, zda je datum víkend weekIndex: number, // index dne v týdnu (0-6) choices: Choices, // seznam voleb uživatelů menus?: { [restaurant in Restaurants]?: DayMenu }, // 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 } /** Veškerá data pro zobrazení na klientovi. */ export interface ClientData extends DayData { todayWeekIndex?: number, // index dnešního dne v týdnu (0-6) } /** Nabídka jídel jednoho podniku pro jeden konkrétní den. */ export interface DayMenu { lastUpdate: string, // human-readable čas poslední aktualizace menu closed: boolean, // příznak, zda je daný podnik v tento den 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", JDEME_OBED = "Jdeme oběd", } export interface NotififaceInput { udalost: UdalostEnum, user: string, } export interface NotifikaceData { input: NotififaceInput, gotify?: boolean, teams?: boolean, ntfy?: 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", } export enum FeatureRequest { SINGLE_PAYMENT = "Možnost úhrady v podniku jednou osobou a generování QR pro ostatní", NOTIFICATIONS = "Podpora push notifikací na mobil", STATISTICS = "Statistiky (nejoblíbenější podnik, nejpopulárnější jídla, nejobjednávanější pizzy, ...)", RESPONSIVITY = "Vylepšení responzivního designu", SECURITY = "Zvýšení zabezpečení aplikace", SAFETY = "Zvýšená ochrana proti chybám uživatele (potvrzovací dialogy, překliky, ...)", UI = "Celkové vylepšení UI/UX", DEVELOPMENT = "Zlepšení dokumentace/postupů pro ostatní vývojáře" }