126 lines
3.8 KiB
TypeScript
126 lines
3.8 KiB
TypeScript
/** 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
|
|
weekIndex: number, // index aktuálního dne v týdnu (0-6)
|
|
choices: Choices, // seznam voleb
|
|
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[];
|
|
} |