// This file is auto-generated by @hey-api/openapi-ts /** * Klientský JWT token pro autentizaci a autorizaci */ export type JwtToken = { /** * Přihlašovací jméno uživatele */ login: string; /** * Příznak, zda se jedná o uživatele ověřeného doménovým přihlášením */ trusted: boolean; /** * Časové razítko vydání tokenu */ iat: number; }; /** * Klientská data pro jeden konkrétní den. Obsahuje menu všech načtených podniků a volby jednotlivých uživatelů. */ export type ClientData = { todayDayIndex: DayIndex; /** * Human-readable datum dne */ date: string; /** * Příznak, zda je tento den víkend */ isWeekend: boolean; dayIndex?: DayIndex; choices: LunchChoices; menus?: RestaurantDayMenuMap; pizzaDay?: PizzaDay; /** * Seznam dostupných pizz pro předaný den */ pizzaList?: Array; /** * Datum a čas poslední aktualizace pizz */ pizzaListLastUpdate?: string; /** * Nevyřízené QR kódy pro platbu z předchozích pizza day */ pendingQrs?: Array; }; /** * Konkrétní volba stravování jednoho uživatele v konkrétní den. Může se jednat jak o stravovací podnik, tak možnosti "budu objednávat", "neobědvám" apod. */ export type UserLunchChoice = { /** * Příznak, zda byla tato volba provedena uživatelem ověřeným doménovým přihlášením */ trusted?: boolean; /** * Pole indexů vybraných jídel v rámci dané restaurace. Index představuje pořadí jídla v menu dané restaurace. */ selectedFoods?: Array; /** * Čas preferovaného odchodu do dané restaurace v human-readable formátu (např. 12:00) */ departureTime?: string; /** * Volitelná, veřejně viditelná uživatelská poznámka k vybrané volbě */ note?: string; /** * Příznak, zda je tento uživatel objednatelem pro stav "Budu objednávat" */ isBuyer?: boolean; }; /** * Objekt, kde klíčem je možnost stravování ((#LunchChoice)) a hodnotou množina uživatelů s touto volbou ((#LunchChoices)). */ export type LocationLunchChoicesMap = { [key: string]: UserLunchChoice; }; /** * Objekt, představující volby všech uživatelů pro konkrétní den. Klíčem je (#LunchChoice). */ export type LunchChoices = { SLADOVNICKA?: LocationLunchChoicesMap; TECHTOWER?: LocationLunchChoicesMap; ZASTAVKAUMICHALA?: LocationLunchChoicesMap; SENKSERIKOVA?: LocationLunchChoicesMap; SPSE?: LocationLunchChoicesMap; PIZZA?: LocationLunchChoicesMap; OBJEDNAVAM?: LocationLunchChoicesMap; NEOBEDVAM?: LocationLunchChoicesMap; ROZHODUJI?: LocationLunchChoicesMap; }; /** * Stravovací zařízení (restaurace, jídelna, hospoda, ...) */ export type Restaurant = 'SLADOVNICKA' | 'TECHTOWER' | 'ZASTAVKAUMICHALA' | 'SENKSERIKOVA'; /** * Stravovací zařízení (restaurace, jídelna, hospoda, ...) */ export const Restaurant = { SLADOVNICKA: 'SLADOVNICKA', TECHTOWER: 'TECHTOWER', ZASTAVKAUMICHALA: 'ZASTAVKAUMICHALA', SENKSERIKOVA: 'SENKSERIKOVA' } as const; /** * Konkrétní možnost stravování (konkrétní restaurace, pizza day, objednání, neobědvání, rozhodování se, ...) */ export type LunchChoice = 'SLADOVNICKA' | 'TECHTOWER' | 'ZASTAVKAUMICHALA' | 'SENKSERIKOVA' | 'SPSE' | 'PIZZA' | 'OBJEDNAVAM' | 'NEOBEDVAM' | 'ROZHODUJI'; /** * Konkrétní možnost stravování (konkrétní restaurace, pizza day, objednání, neobědvání, rozhodování se, ...) */ export const LunchChoice = { SLADOVNICKA: 'SLADOVNICKA', TECHTOWER: 'TECHTOWER', ZASTAVKAUMICHALA: 'ZASTAVKAUMICHALA', SENKSERIKOVA: 'SENKSERIKOVA', SPSE: 'SPSE', PIZZA: 'PIZZA', OBJEDNAVAM: 'OBJEDNAVAM', NEOBEDVAM: 'NEOBEDVAM', ROZHODUJI: 'ROZHODUJI' } as const; /** * Index dne v týdnu (0 = pondělí, 4 = pátek) */ export type DayIndex = number; /** * Pořadový index jídla v menu konkrétní restaurace */ export type FoodIndex = number; /** * Konkrétní jídlo z menu restaurace */ export type Food = { /** * Množství standardní porce, např. 0,33l nebo 150g */ amount?: string; /** * Název/popis jídla */ name: string; /** * Cena ve formátu '135 Kč' */ price?: string; /** * Příznak, zda se jedná o polévku */ isSoup: boolean; /** * Seznam čísel alergenů obsažených v jídle */ allergens?: Array; }; /** * Menu restaurace na konkrétní den */ export type RestaurantDayMenu = { /** * UNIX timestamp poslední aktualizace menu */ lastUpdate?: number; /** * Příznak, zda je daný podnik v daný den zavřený */ closed?: boolean; /** * Seznam jídel pro daný den */ food?: Array; /** * Seznam varování o kvalitě/úplnosti dat menu */ warnings?: Array; }; /** * Objekt, kde klíčem je podnik ((#Restaurant)) a hodnotou denní menu daného podniku ((#RestaurantDayMenu)) */ export type RestaurantDayMenuMap = { SLADOVNICKA?: RestaurantDayMenu; TECHTOWER?: RestaurantDayMenu; ZASTAVKAUMICHALA?: RestaurantDayMenu; SENKSERIKOVA?: RestaurantDayMenu; }; /** * Pole týdenních menu jednotlivých podniků. Indexem je den v týdnu (0 = pondělí, 4 = pátek), hodnotou denní menu daného podniku. */ export type WeekMenu = [ RestaurantDayMenuMap, RestaurantDayMenuMap, RestaurantDayMenuMap, RestaurantDayMenuMap, RestaurantDayMenuMap ]; /** * Preferovaný čas odchodu na oběd */ export type DepartureTime = '10:00' | '10:15' | '10:30' | '10:45' | '11:00' | '11:15' | '11:30' | '11:45' | '12:00' | '12:15' | '12:30' | '12:45' | '13:00'; /** * Preferovaný čas odchodu na oběd */ export const 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' } as const; export type FeatureRequest = 'Ruční generování QR kódů mimo Pizza day (např. při objednávání)' | 'Možnost označovat si jídla jako oblíbená (taková jídla by se uživateli následně zvýrazňovala)' | 'Možnost úhrady v podniku za všechny jednou osobou a následné generování QR ostatním' | 'Zrušení \\"užívejte víkend\\", místo toho umožnit zpětně náhled na uplynulý týden' | '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\\")' | 'Zobrazování náhledů (fotografií) pizz v rámci Pizza day' | 'Statistiky (nejoblíbenější podnik, nejpopulárnější jídla, nejobjednávanější pizzy, nejčastější uživatelé, ...)' | 'Vylepšení responzivního designu' | 'Zvýšení zabezpečení aplikace' | 'Zvýšená ochrana proti chybám uživatele (potvrzovací dialogy, překliky, ...)' | 'Celkové vylepšení UI/UX' | 'Zlepšení dokumentace/postupů pro ostatní vývojáře'; export const 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' } as const; /** * Statistiky hlasování - klíčem je název funkce, hodnotou počet hlasů */ export type VotingStats = { [key: string]: number; }; /** * Data pro zobrazení easter eggů ssss */ 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; }; /** * Objekt, kde klíčem je zvolená možnost a hodnotou počet uživatelů, kteří tuto možnosti zvolili */ export type LocationStats = { SLADOVNICKA?: number; TECHTOWER?: number; ZASTAVKAUMICHALA?: number; SENKSERIKOVA?: number; SPSE?: number; PIZZA?: number; OBJEDNAVAM?: number; NEOBEDVAM?: number; ROZHODUJI?: number; }; /** * Statistika vybraných možností pro jeden konkrétní den */ export type DailyStats = { /** * Datum v human-readable formátu */ date: string; locations: LocationStats; }; /** * Pole statistik vybraných možností pro jeden konkrétní týden. Index představuje den v týdnu (0 = pondělí, 4 = pátek) */ export type WeeklyStats = [ DailyStats, DailyStats, DailyStats, DailyStats, DailyStats ]; /** * Stav pizza day */ export type PizzaDayState = 'Pizza day nebyl založen' | 'Pizza day je založen' | 'Objednávky uzamčeny' | 'Pizzy objednány' | 'Pizzy doručeny'; /** * Stav pizza day */ export const 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' } as const; /** * Údaje o konkrétní variantě pizzy */ export type PizzaSize = { /** * Unikátní identifikátor varianty pizzy */ varId: number; /** * Velikost pizzy, např. "30cm" */ size: string; /** * Cena samotné pizzy v Kč */ pizzaPrice: number; /** * Cena krabice pizzy v Kč */ boxPrice: number; /** * Celková cena (pizza + krabice) */ price: number; }; /** * Údaje o konkrétní pizze. */ export type Pizza = { /** * Název pizzy */ name: string; /** * Seznam obsažených ingrediencí */ ingredients: Array; /** * Dostupné velikosti pizzy */ sizes: Array; }; /** * Konkrétní varianta (velikost) jedné pizzy. */ export type PizzaVariant = { /** * Unikátní identifikátor varianty pizzy */ varId: number; /** * Název pizzy */ name: string; /** * Velikost pizzy (např. "30cm") */ size: string; /** * Cena pizzy v Kč, včetně krabice */ price: number; }; /** * Údaje o objednávce pizzy jednoho uživatele. */ export type PizzaOrder = { /** * Jméno objednávajícího uživatele */ customer: string; /** * Seznam variant pizz k objednání (typicky bývá jen jedna) */ pizzaList?: Array; /** * Příplatek (např. za extra ingredience) */ fee?: { /** * Popis příplatku (např. "kuřecí maso navíc") */ text?: string; /** * Cena příplatku v Kč */ price?: number; }; /** * Celková cena všech objednaných pizz daného uživatele, včetně krabic a příplatků */ totalPrice: number; /** * Příznak, pokud je k této objednávce vygenerován QR kód pro platbu. To je typicky pravda, pokud: * - objednávající má v nastavení vyplněno číslo účtu * - pizza day je ve stavu DELIVERED (Pizzy byly doručeny) * */ hasQr: unknown; /** * Volitelná uživatelská poznámka pro objednávajícího (např. "bez oliv") */ note?: string; }; /** * Data o Pizza day pro konkrétní den */ export type PizzaDay = { state?: PizzaDayState; /** * Jméno zakladatele pizza day */ creator?: string; /** * Pole objednávek jednotlivých uživatelů */ orders?: Array; }; export type UdalostEnum = 'Zahájen pizza day' | 'Objednána pizza' | 'Jdeme na oběd'; export const UdalostEnum = { ZAHAJENA_PIZZA: 'Zahájen pizza day', OBJEDNANA_PIZZA: 'Objednána pizza', JDEME_NA_OBED: 'Jdeme na oběd' } as const; export type NotifikaceInput = { udalost: UdalostEnum; user: string; }; export type NotifikaceData = { input: NotifikaceInput; gotify?: boolean; teams?: boolean; ntfy?: boolean; }; export type GotifyServer = { server: string; api_keys: Array; }; /** * Nastavení notifikací pro konkrétního uživatele */ export type NotificationSettings = { /** * Téma (topic) pro ntfy notifikace. Pokud je prázdné, ntfy notifikace jsou vypnuty. */ ntfyTopic?: string; /** * URL Discord webhooku. Pokud je prázdné, Discord notifikace jsou vypnuty. */ discordWebhookUrl?: string; /** * URL MS Teams webhooku. Pokud je prázdné, Teams notifikace jsou vypnuty. */ teamsWebhookUrl?: string; /** * Události, pro které chce uživatel dostávat notifikace */ enabledEvents?: Array; }; export type GetNotificationSettingsData = { body?: never; path?: never; query?: never; url: '/notifications/settings'; }; export type GetNotificationSettingsResponses = { 200: NotificationSettings; }; export type GetNotificationSettingsResponse = GetNotificationSettingsResponses[keyof GetNotificationSettingsResponses]; export type UpdateNotificationSettingsData = { body: NotificationSettings; path?: never; query?: never; url: '/notifications/settings'; }; export type UpdateNotificationSettingsResponses = { 200: NotificationSettings; }; export type LoginData = { body?: { /** * Přihlašovací jméno uživatele. Vyžadováno pouze pokud není předáno pomocí hlaviček. */ login?: string; }; path?: never; query?: never; url: '/login'; }; export type LoginResponses = { /** * Přihlášení bylo úspěšné */ 200: JwtToken; }; export type LoginResponse = LoginResponses[keyof LoginResponses]; export type GetPizzaQrData = { body?: never; path?: never; query: { /** * Přihlašovací jméno uživatele, pro kterého bude vrácen QR kód */ login: string; }; url: '/qr'; }; export type GetPizzaQrResponses = { /** * Vygenerovaný QR kód pro platbu */ 200: Blob | File; }; export type GetPizzaQrResponse = GetPizzaQrResponses[keyof GetPizzaQrResponses]; export type GetDataData = { body?: never; path?: never; query?: { /** * Index dne v týdnu. Pokud není předán, je použit aktuální den. */ dayIndex?: number; }; url: '/data'; }; export type GetDataResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type GetDataResponse = GetDataResponses[keyof GetDataResponses]; export type AddChoiceData = { body: { locationKey: LunchChoice; dayIndex?: DayIndex; foodIndex?: FoodIndex; }; path?: never; query?: never; url: '/food/addChoice'; }; export type AddChoiceResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type AddChoiceResponse = AddChoiceResponses[keyof AddChoiceResponses]; export type RemoveChoiceData = { body: { foodIndex: FoodIndex; locationKey: LunchChoice; dayIndex?: DayIndex; }; path?: never; query?: never; url: '/food/removeChoice'; }; export type RemoveChoiceResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type RemoveChoiceResponse = RemoveChoiceResponses[keyof RemoveChoiceResponses]; export type UpdateNoteData = { body: { dayIndex?: DayIndex; note?: string; }; path?: never; query?: never; url: '/food/updateNote'; }; export type UpdateNoteResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type UpdateNoteResponse = UpdateNoteResponses[keyof UpdateNoteResponses]; export type RemoveChoicesData = { body: { locationKey: LunchChoice; dayIndex?: DayIndex; }; path?: never; query?: never; url: '/food/removeChoices'; }; export type RemoveChoicesResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type RemoveChoicesResponse = RemoveChoicesResponses[keyof RemoveChoicesResponses]; export type ChangeDepartureTimeData = { body: { dayIndex?: DayIndex; time?: DepartureTime; }; path?: never; query?: never; url: '/food/changeDepartureTime'; }; export type ChangeDepartureTimeResponses = { /** * Aktuální data pro klienta */ 200: ClientData; }; export type ChangeDepartureTimeResponse = ChangeDepartureTimeResponses[keyof ChangeDepartureTimeResponses]; export type JdemeObedData = { body?: never; path?: never; query?: never; url: '/food/jdemeObed'; }; export type JdemeObedResponses = { /** * Notifikace byly odeslány. */ 200: unknown; }; export type SetBuyerData = { body?: never; path?: never; query?: never; url: '/food/updateBuyer'; }; export type SetBuyerResponses = { /** * Stav byl úspěšně změněn. */ 200: unknown; }; export type CreatePizzaDayData = { body?: never; path?: never; query?: never; url: '/pizzaDay/create'; }; export type CreatePizzaDayResponses = { /** * Pizza day byl založen. */ 200: unknown; }; export type DeletePizzaDayData = { body?: never; path?: never; query?: never; url: '/pizzaDay/delete'; }; export type DeletePizzaDayResponses = { /** * Pizza day byl smazán. */ 200: unknown; }; export type LockPizzaDayData = { body?: never; path?: never; query?: never; url: '/pizzaDay/lock'; }; export type LockPizzaDayResponses = { /** * Pizza day byl uzamčen. */ 200: unknown; }; export type UnlockPizzaDayData = { body?: never; path?: never; query?: never; url: '/pizzaDay/unlock'; }; export type UnlockPizzaDayResponses = { /** * Pizza day byl odemčen. */ 200: unknown; }; export type FinishOrderData = { body?: never; path?: never; query?: never; url: '/pizzaDay/finishOrder'; }; export type FinishOrderResponses = { /** * Pizza day byl přepnut do stavu "Pizzy objednány". */ 200: unknown; }; export type FinishDeliveryData = { body: { /** * Číslo bankovního účtu objednávajícího */ bankAccount?: string; /** * Jméno majitele bankovního účtu */ bankAccountHolder?: string; }; path?: never; query?: never; url: '/pizzaDay/finishDelivery'; }; export type FinishDeliveryResponses = { /** * Pizza day byl přepnut do stavu "Pizzy doručeny". */ 200: unknown; }; export type AddPizzaData = { body: { /** * Index pizzy v nabídce */ pizzaIndex: number; /** * Index velikosti pizzy v nabídce variant */ pizzaSizeIndex: number; }; path?: never; query?: never; url: '/pizzaDay/add'; }; export type AddPizzaResponses = { /** * Přidání pizzy do objednávky proběhlo úspěšně. */ 200: unknown; }; export type RemovePizzaData = { body: { pizzaOrder: PizzaVariant; }; path?: never; query?: never; url: '/pizzaDay/remove'; }; export type RemovePizzaResponses = { /** * Odstranění pizzy z objednávky proběhlo úspěšně. */ 200: unknown; }; export type UpdatePizzaDayNoteData = { body: { /** * Poznámka k objednávkám pizz, např "bez oliv". */ note?: string; }; path?: never; query?: never; url: '/pizzaDay/updatePizzaDayNote'; }; export type UpdatePizzaDayNoteResponses = { /** * Nastavení poznámky k objednávkám pizz proběhlo úspěšně. */ 200: unknown; }; export type UpdatePizzaFeeData = { body: { /** * Login cíleného uživatele */ login: string; /** * Textový popis přirážky/slevy */ text?: string; /** * Částka přirážky/slevy v Kč */ price?: number; }; path?: never; query?: never; url: '/pizzaDay/updatePizzaFee'; }; export type UpdatePizzaFeeResponses = { /** * Nastavení přirážky/slevy proběhlo úspěšně. */ 200: unknown; }; export type GetEasterEggData = { body?: never; path?: never; query?: never; url: '/easterEggs'; }; export type GetEasterEggResponses = { 200: EasterEgg; }; export type GetEasterEggResponse = GetEasterEggResponses[keyof GetEasterEggResponses]; export type GetEasterEggImageData = { body?: never; path: { /** * URL easter eggu */ url: string; }; query?: never; url: '/easterEggs/{url}'; }; export type GetEasterEggImageResponses = { 200: Blob | File; }; export type GetEasterEggImageResponse = GetEasterEggImageResponses[keyof GetEasterEggImageResponses]; export type GetStatsData = { body?: never; path?: never; query: { /** * Počáteční datum pro načtení statistik */ startDate: string; /** * Koncové datum pro načtení statistik */ endDate: string; }; url: '/stats'; }; export type GetStatsResponses = { /** * Statistiky způsobu stravování. Každý prvek v poli představuje statistiky pro jeden den z předaného rozsahu dat. */ 200: WeeklyStats; }; export type GetStatsResponse = GetStatsResponses[keyof GetStatsResponses]; export type GetVotesData = { body?: never; path?: never; query?: never; url: '/voting/getVotes'; }; export type GetVotesResponses = { 200: Array; }; export type GetVotesResponse = GetVotesResponses[keyof GetVotesResponses]; export type UpdateVoteData = { body: { option: FeatureRequest; /** * True, pokud uživatel hlasoval pro, jinak false. */ active: boolean; }; path?: never; query?: never; url: '/voting/updateVote'; }; export type UpdateVoteResponses = { /** * Hlasování bylo úspěšně aktualizováno. */ 200: unknown; }; export type GetVotingStatsData = { body?: never; path?: never; query?: never; url: '/voting/stats'; }; export type GetVotingStatsResponses = { 200: VotingStats; }; export type GetVotingStatsResponse = GetVotingStatsResponses[keyof GetVotingStatsResponses]; /** * Informace o nevyřízeném QR kódu pro platbu */ export type PendingQr = { /** * Datum pizza day, ke kterému se QR kód vztahuje */ date: string; /** * Jméno zakladatele pizza day (příjemce platby) */ creator: string; /** * Celková částka k úhradě */ totalPrice: number; }; export type DismissQrData = { body: { /** * Datum pizza day, jehož QR kód se má označit jako uhrazený */ date: string; }; path?: never; query?: never; url: '/pizzaDay/dismissQr'; }; export type DismissQrResponses = { 200: unknown; }; export type ClientOptions = { baseUrl: `${string}://${string}/api` | (string & {}); };