217 lines
7.0 KiB
TypeScript
217 lines
7.0 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',
|
|
ZASTAVKAUMICHALA = 'zastavkaUmichala',
|
|
SENKSERIKOVA = 'senkSerikova',
|
|
}
|
|
|
|
export type FoodChoices = {
|
|
trusted: boolean,
|
|
options: number[],
|
|
departureTime?: string,
|
|
note?: string,
|
|
}
|
|
|
|
// TODO okomentovat / rozdělit
|
|
export type Choices = {
|
|
[location in LocationKey]?: {
|
|
[login: string]: FoodChoices
|
|
}
|
|
}
|
|
|
|
/** Velikost konkrétní pizzy */
|
|
export type 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 type Pizza = {
|
|
name: string, // název pizzy
|
|
ingredients: string[], // seznam ingrediencí
|
|
sizes: PizzaSize[], // dostupné velikosti pizzy
|
|
}
|
|
|
|
/** Objednávka jedné konkrétní pizzy */
|
|
export type 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 type 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 type WeekMenu = {
|
|
[dayIndex: number]: {
|
|
[restaurant in Restaurants]?: DayMenu
|
|
}
|
|
}
|
|
|
|
/** Data vztahující se k jednomu konkrétnímu dni. */
|
|
export type 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 type ClientData = 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 type DayMenu = {
|
|
lastUpdate: number, // UNIX timestamp 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 type 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
|
|
// TODO pokud by se použilo ovládáni výběru obědu kliknutím, pak bych restaurace z tohoto výčtu vyhodil
|
|
export enum Locations {
|
|
SLADOVNICKA = 'Sladovnická',
|
|
// UMOTLIKU = 'U Motlíků',
|
|
TECHTOWER = 'TechTower',
|
|
ZASTAVKAUMICHALA = 'Zastávka u Michala',
|
|
SENKSERIKOVA = 'Pivovarský šenk Šeříková',
|
|
SPSE = 'SPŠE',
|
|
PIZZA = 'Pizza day',
|
|
OBJEDNAVAM = 'Budu objednávat',
|
|
NEOBEDVAM = 'Mám vlastní/neobědvám',
|
|
ROZHODUJI = 'Rozhoduji se',
|
|
}
|
|
|
|
// TODO totéž
|
|
export type LocationKey = keyof typeof Locations;
|
|
|
|
export enum UdalostEnum {
|
|
ZAHAJENA_PIZZA = "Zahájen pizza day",
|
|
OBJEDNANA_PIZZA = "Objednána pizza",
|
|
JDEME_OBED = "Jdeme na oběd",
|
|
}
|
|
|
|
export type NotififaceInput = {
|
|
locationKey?: LocationKey,
|
|
udalost: UdalostEnum,
|
|
user: string,
|
|
}
|
|
|
|
export type 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 {
|
|
CUSTOM_QR = "Ruční generování QR kódů mimo Pizza day (např. při objednávání)",
|
|
FAVORITES = "Možnost označovat si jídla jako oblíbená (taková jídla by se uživateli následně zvýrazňovala)",
|
|
SINGLE_PAYMENT = "Možnost úhrady v podniku za všechny jednou osobou a následné generování QR ostatním",
|
|
NO_WEEKENDS = "Zrušení \"užívejte víkend\", místo toho umožnit zpětně náhled na uplynulý týden",
|
|
QR_FOREVER = "Umožnění zobrazení vygenerovaného QR kódu i po následující dny (dokud ho uživatel ručně \"nezavře\", např. tlačítkem \"Zaplatil jsem\")",
|
|
PIZZA_PICTURES = "Zobrazování náhledů (fotografií) pizz v rámci Pizza day",
|
|
STATISTICS = "Statistiky (nejoblíbenější podnik, nejpopulárnější jídla, nejobjednávanější pizzy, nejčastější uživatelé, ...)",
|
|
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"
|
|
}
|
|
|
|
export type EasterEgg = {
|
|
path: string;
|
|
url: string;
|
|
startOffset: number;
|
|
endOffset: number;
|
|
duration: number;
|
|
width?: string;
|
|
zIndex?: number;
|
|
position?: "absolute";
|
|
animationName?: string;
|
|
animationDuration?: string;
|
|
animationTimingFunction?: string;
|
|
}
|
|
|
|
// TODO aktuálně se k ničemu nepoužívá
|
|
export type AnimationPosition = {
|
|
left?: string,
|
|
startLeft?: string,
|
|
"--start-left"?: string,
|
|
right?: string,
|
|
startRight?: string,
|
|
"--start-right"?: string,
|
|
top?: string,
|
|
startTop?: string,
|
|
"--start-top"?: string,
|
|
bottom?: string,
|
|
startBottom?: string,
|
|
"--start-bottom"?: string,
|
|
endLeft?: string,
|
|
"--end-left"?: string,
|
|
endRight?: string,
|
|
"--end-right"?: string,
|
|
endTop?: string,
|
|
"--end-top"?: string,
|
|
endBottom?: string,
|
|
"--end-bottom"?: string,
|
|
rotate?: string,
|
|
} |