159 lines
5.1 KiB
TypeScript
159 lines
5.1 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
|
|
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",
|
|
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"
|
|
} |