Migrace klienta na OpenAPI
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { FeatureRequest, LunchChoice, PizzaVariant } from "../types";
|
||||
|
||||
export type ILocationKey = {
|
||||
locationKey: keyof typeof LunchChoice,
|
||||
locationKey: LunchChoice,
|
||||
}
|
||||
|
||||
export type IDayIndex = {
|
||||
|
||||
684
types/api.yml
684
types/api.yml
@@ -5,642 +5,76 @@ info:
|
||||
servers:
|
||||
- url: /api
|
||||
paths:
|
||||
# Obecné (/api)
|
||||
/login:
|
||||
post:
|
||||
summary: Přihlášení uživatele
|
||||
security: [] # Nevyžaduje autentizaci
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
description: Přihlašovací jméno uživatele. Vyžadováno pouze pokud není předáno pomocí hlaviček.
|
||||
responses:
|
||||
"200":
|
||||
description: Přihlášení bylo úspěšné
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JWTToken"
|
||||
$ref: "./paths/login.yml"
|
||||
/qr:
|
||||
get:
|
||||
summary: Získání QR kódu pro platbu za Pizza day
|
||||
security: [] # Nevyžaduje autentizaci
|
||||
parameters:
|
||||
- in: query
|
||||
name: login
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
description: Přihlašovací jméno uživatele, pro kterého bude vrácen QR kód
|
||||
responses:
|
||||
"200":
|
||||
description: Vygenerovaný QR kód pro platbu
|
||||
content:
|
||||
image/png:
|
||||
schema:
|
||||
type: string
|
||||
format: binary
|
||||
$ref: "./paths/getPizzaQr.yml"
|
||||
/data:
|
||||
get:
|
||||
summary: Načtení klientských dat pro aktuální nebo předaný den
|
||||
parameters:
|
||||
- in: query
|
||||
name: dayIndex
|
||||
description: Index dne v týdnu. Pokud není předán, je použit aktuální den.
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 0
|
||||
maximum: 4
|
||||
responses:
|
||||
"200":
|
||||
$ref: "#/components/responses/ClientDataResponse"
|
||||
/addChoice:
|
||||
post:
|
||||
summary: Přidání či nahrazení volby uživatele pro zvolený den/podnik
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- locationKey
|
||||
allOf:
|
||||
- locationKey:
|
||||
$ref: "#/components/schemas/LunchChoice"
|
||||
- dayIndex:
|
||||
$ref: "#/components/schemas/DayIndex"
|
||||
- foodIndex:
|
||||
$ref: "#/components/schemas/FoodIndex"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "#/components/responses/ClientDataResponse"
|
||||
/removeChoices:
|
||||
post:
|
||||
summary: Odstranění volby uživatele pro zvolený den/podnik, včetně případných jídel
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- locationKey
|
||||
allOf:
|
||||
- locationKey:
|
||||
$ref: "#/components/schemas/LunchChoice"
|
||||
- dayIndex:
|
||||
$ref: "#/components/schemas/DayIndex"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "#/components/responses/ClientDataResponse"
|
||||
$ref: "./paths/getData.yml"
|
||||
|
||||
# Restaurace a jídla (/api/food)
|
||||
/food/addChoice:
|
||||
$ref: "./paths/food/addChoice.yml"
|
||||
/food/removeChoice:
|
||||
$ref: "./paths/food/removeChoice.yml"
|
||||
/food/updateNote:
|
||||
$ref: "./paths/food/updateNote.yml"
|
||||
/food/removeChoices:
|
||||
$ref: "./paths/food/removeChoices.yml"
|
||||
/food/changeDepartureTime:
|
||||
$ref: "./paths/food/changeDepartureTime.yml"
|
||||
/food/jdemeObed:
|
||||
$ref: "./paths/food/jdemeObed.yml"
|
||||
|
||||
# Pizza day (/api/pizzaDay)
|
||||
/pizzaDay/create:
|
||||
$ref: "./paths/pizzaDay/create.yml"
|
||||
/pizzaDay/delete:
|
||||
$ref: "./paths/pizzaDay/delete.yml"
|
||||
/pizzaDay/lock:
|
||||
$ref: "./paths/pizzaDay/lock.yml"
|
||||
/pizzaDay/unlock:
|
||||
$ref: "./paths/pizzaDay/unlock.yml"
|
||||
/pizzaDay/finishOrder:
|
||||
$ref: "./paths/pizzaDay/finishOrder.yml"
|
||||
/pizzaDay/finishDelivery:
|
||||
$ref: "./paths/pizzaDay/finishDelivery.yml"
|
||||
/pizzaDay/add:
|
||||
$ref: "./paths/pizzaDay/addPizza.yml"
|
||||
/pizzaDay/remove:
|
||||
$ref: "./paths/pizzaDay/removePizza.yml"
|
||||
/pizzaDay/updatePizzaDayNote:
|
||||
$ref: "./paths/pizzaDay/updatePizzaDayNote.yml"
|
||||
/pizzaDay/updatePizzaFee:
|
||||
$ref: "./paths/pizzaDay/updatePizzaFee.yml"
|
||||
|
||||
# Easter eggy (/api/easterEggs)
|
||||
/easterEggs:
|
||||
$ref: "./paths/easterEggs/easterEggs.yml"
|
||||
/easterEggs/{url}:
|
||||
$ref: "./paths/easterEggs/easterEgg.yml"
|
||||
|
||||
# Statistiky (/api/stats)
|
||||
/stats:
|
||||
$ref: "./paths/stats/stats.yml"
|
||||
|
||||
# Hlasování (/api/voting)
|
||||
/voting/getVotes:
|
||||
$ref: "./paths/voting/getVotes.yml"
|
||||
/voting/updateVote:
|
||||
$ref: "./paths/voting/updateVote.yml"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
# --- OBECNÉ ---
|
||||
JWTToken:
|
||||
type: object
|
||||
description: Klientský JWT token pro autentizaci a autorizaci
|
||||
required:
|
||||
- login
|
||||
- trusted
|
||||
- iat
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
description: Přihlašovací jméno uživatele
|
||||
trusted:
|
||||
type: boolean
|
||||
description: Příznak, zda se jedná o uživatele ověřeného doménovým přihlášením
|
||||
iat:
|
||||
type: number
|
||||
description: Časové razítko vydání tokenu
|
||||
ClientData:
|
||||
description: Klientská data pro jeden konkrétní den. Obsahuje menu všech načtených podniků a volby jednotlivých uživatelů.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- todayDayIndex
|
||||
- date
|
||||
- isWeekend
|
||||
- choices
|
||||
properties:
|
||||
todayDayIndex:
|
||||
description: Index dnešního dne v týdnu
|
||||
$ref: "#/components/schemas/DayIndex"
|
||||
date:
|
||||
description: Human-readable datum dne
|
||||
type: string
|
||||
isWeekend:
|
||||
description: Příznak, zda je tento den víkend
|
||||
type: boolean
|
||||
dayIndex:
|
||||
description: Index dne v týdnu, ke kterému se vztahují tato data
|
||||
$ref: "#/components/schemas/DayIndex"
|
||||
choices:
|
||||
$ref: "#/components/schemas/LunchChoices"
|
||||
menus:
|
||||
$ref: "#/components/schemas/RestaurantDayMenuMap"
|
||||
pizzaDay:
|
||||
$ref: "#/components/schemas/PizzaDay"
|
||||
pizzaList:
|
||||
description: Seznam dostupných pizz pro předaný den
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/Pizza"
|
||||
pizzaListLastUpdate:
|
||||
description: Datum a čas poslední aktualizace pizz
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
# --- OBĚDY ---
|
||||
UserLunchChoice:
|
||||
description: 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.
|
||||
additionalProperties: false
|
||||
properties:
|
||||
# TODO toto je tu z dost špatného důvodu, viz použití - mělo by se místo toho z loginu zjišťovat zda je uživatel trusted
|
||||
trusted:
|
||||
description: Příznak, zda byla tato volba provedena uživatelem ověřeným doménovým přihlášením
|
||||
type: boolean
|
||||
selectedFoods:
|
||||
description: Pole indexů vybraných jídel v rámci dané restaurace. Index představuje pořadí jídla v menu dané restaurace.
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
departureTime:
|
||||
description: Čas preferovaného odchodu do dané restaurace v human-readable formátu (např. 12:00)
|
||||
type: string
|
||||
note:
|
||||
description: Volitelná, veřejně viditelná uživatelská poznámka k vybrané volbě
|
||||
type: string
|
||||
LocationLunchChoicesMap:
|
||||
description: Objekt, kde klíčem je možnost stravování ((#/components/schemas/LunchChoice)) a hodnotou množina uživatelů s touto volbou ((#/components/schemas/LunchChoices)).
|
||||
type: object
|
||||
additionalProperties:
|
||||
$ref: "#/components/schemas/UserLunchChoice"
|
||||
LunchChoices:
|
||||
description: Objekt, představující volby všech uživatelů pro konkrétní den. Klíčem je (#/components/schemas/LunchChoice).
|
||||
type: object
|
||||
properties:
|
||||
SLADOVNICKA:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
TECHTOWER:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
ZASTAVKAUMICHALA:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
SENKSERIKOVA:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
SPSE:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
PIZZA:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
OBJEDNAVAM:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
NEOBEDVAM:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
ROZHODUJI:
|
||||
$ref: "#/components/schemas/LocationLunchChoicesMap"
|
||||
Restaurant:
|
||||
description: Stravovací zařízení (restaurace, jídelna, hospoda, ...)
|
||||
type: string
|
||||
enum:
|
||||
- Sladovnická
|
||||
- TechTower
|
||||
- Zastávka u Michala
|
||||
- Šenk Šeříková
|
||||
x-enum-varnames:
|
||||
- SLADOVNICKA
|
||||
- TECHTOWER
|
||||
- ZASTAVKAUMICHALA
|
||||
- SENKSERIKOVA
|
||||
LunchChoice:
|
||||
description: Konkrétní možnost stravování (konkrétní restaurace, pizza day, objednání, neobědvání, rozhodování se, ...)
|
||||
type: string
|
||||
enum:
|
||||
- Sladovnická
|
||||
- TechTower
|
||||
- Zastávka u Michala
|
||||
- Šenk Šeříková
|
||||
- SPŠE
|
||||
- Pizza day
|
||||
- Budu objednávat
|
||||
- Mám vlastní/neobědvám
|
||||
- Rozhoduji se
|
||||
x-enum-varnames:
|
||||
- SLADOVNICKA
|
||||
- TECHTOWER
|
||||
- ZASTAVKAUMICHALA
|
||||
- SENKSERIKOVA
|
||||
- SPSE
|
||||
- PIZZA
|
||||
- OBJEDNAVAM
|
||||
- NEOBEDVAM
|
||||
- ROZHODUJI
|
||||
DayIndex:
|
||||
description: Index dne v týdnu (0 = pondělí, 4 = pátek)
|
||||
type: integer
|
||||
minimum: 0
|
||||
maximum: 4
|
||||
FoodIndex:
|
||||
description: Pořadový index jídla v menu konkrétní restaurace
|
||||
type: integer
|
||||
minimum: 0
|
||||
Food:
|
||||
description: Konkrétní jídlo z menu restaurace
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- isSoup
|
||||
properties:
|
||||
amount:
|
||||
description: Množství standardní porce, např. 0,33l nebo 150g
|
||||
type: string
|
||||
name:
|
||||
description: Název/popis jídla
|
||||
type: string
|
||||
price:
|
||||
description: Cena ve formátu '135 Kč'
|
||||
type: string
|
||||
isSoup:
|
||||
description: Příznak, zda se jedná o polévku
|
||||
type: boolean
|
||||
RestaurantDayMenu:
|
||||
description: Menu restaurace na konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
lastUpdate:
|
||||
description: UNIX timestamp poslední aktualizace menu
|
||||
type: integer
|
||||
closed:
|
||||
description: Příznak, zda je daný podnik v daný den zavřený
|
||||
type: boolean
|
||||
food:
|
||||
description: Seznam jídel pro daný den
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/Food"
|
||||
RestaurantDayMenuMap:
|
||||
description: Objekt, kde klíčem je podnik ((#/components/schemas/Restaurant)) a hodnotou denní menu daného podniku ((#/components/schemas/RestaurantDayMenu))
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
SLADOVNICKA:
|
||||
$ref: "#/components/schemas/RestaurantDayMenu"
|
||||
TECHTOWER:
|
||||
$ref: "#/components/schemas/RestaurantDayMenu"
|
||||
ZASTAVKAUMICHALA:
|
||||
$ref: "#/components/schemas/RestaurantDayMenu"
|
||||
SENKSERIKOVA:
|
||||
$ref: "#/components/schemas/RestaurantDayMenu"
|
||||
WeekMenu:
|
||||
description: 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.
|
||||
type: array
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
items:
|
||||
$ref: "#/components/schemas/RestaurantDayMenuMap"
|
||||
DepartureTime:
|
||||
description: Preferovaný čas odchodu na oběd
|
||||
type: string
|
||||
enum:
|
||||
- "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"
|
||||
x-enum-varnames:
|
||||
- T10_00
|
||||
- T10_15
|
||||
- T10_30
|
||||
- T10_45
|
||||
- T11_00
|
||||
- T11_15
|
||||
- T11_30
|
||||
- T11_45
|
||||
- T12_00
|
||||
- T12_15
|
||||
- T12_30
|
||||
- T12_45
|
||||
- T13_00
|
||||
|
||||
# --- HLASOVÁNÍ ---
|
||||
FeatureRequest:
|
||||
type: string
|
||||
enum:
|
||||
- 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
|
||||
x-enum-varnames:
|
||||
- CUSTOM_QR
|
||||
- FAVORITES
|
||||
- SINGLE_PAYMENT
|
||||
- NO_WEEKENDS
|
||||
- QR_FOREVER
|
||||
- PIZZA_PICTURES
|
||||
- STATISTICS
|
||||
- RESPONSIVITY
|
||||
- SECURITY
|
||||
- SAFETY
|
||||
- UI
|
||||
- DEVELOPMENT
|
||||
|
||||
# --- EASTER EGGS ---
|
||||
EasterEgg:
|
||||
description: Data pro zobrazení easter eggů
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- path
|
||||
- url
|
||||
- startOffset
|
||||
- endOffset
|
||||
- duration
|
||||
properties:
|
||||
path:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
startOffset:
|
||||
type: number
|
||||
endOffset:
|
||||
type: number
|
||||
duration:
|
||||
type: number
|
||||
width:
|
||||
type: string
|
||||
zIndex:
|
||||
type: integer
|
||||
position:
|
||||
type: string
|
||||
enum:
|
||||
- absolute
|
||||
animationName:
|
||||
type: string
|
||||
animationDuration:
|
||||
type: string
|
||||
animationTimingFunction:
|
||||
type: string
|
||||
|
||||
# --- STATISTIKY ---
|
||||
LocationStats:
|
||||
description: Objekt, kde klíčem je zvolená možnost a hodnotou počet uživatelů, kteří tuto možnosti zvolili
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
# Bohužel OpenAPI neumí nadefinovat objekt, kde klíčem může být pouze hodnota existujícího enumu :(
|
||||
SLADOVNICKA:
|
||||
type: number
|
||||
TECHTOWER:
|
||||
type: number
|
||||
ZASTAVKAUMICHALA:
|
||||
type: number
|
||||
SENKSERIKOVA:
|
||||
type: number
|
||||
SPSE:
|
||||
type: number
|
||||
PIZZA:
|
||||
type: number
|
||||
OBJEDNAVAM:
|
||||
type: number
|
||||
NEOBEDVAM:
|
||||
type: number
|
||||
ROZHODUJI:
|
||||
type: number
|
||||
DailyStats:
|
||||
description: Statistika vybraných možností pro jeden konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- locations
|
||||
properties:
|
||||
date:
|
||||
description: Datum v human-readable formátu
|
||||
type: string
|
||||
locations:
|
||||
$ref: "#/components/schemas/LocationStats"
|
||||
WeeklyStats:
|
||||
description: 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)
|
||||
type: array
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
items:
|
||||
$ref: "#/components/schemas/DailyStats"
|
||||
|
||||
# --- PIZZA DAY ---
|
||||
PizzaDayState:
|
||||
description: Stav pizza day
|
||||
type: string
|
||||
enum:
|
||||
- Pizza day nebyl založen
|
||||
- Pizza day je založen
|
||||
- Objednávky uzamčeny
|
||||
- Pizzy objednány
|
||||
- Pizzy doručeny
|
||||
x-enum-varnames:
|
||||
- NOT_CREATED
|
||||
- CREATED
|
||||
- LOCKED
|
||||
- ORDERED
|
||||
- DELIVERED
|
||||
# TODO toto je jen rozšířená varianta PizzaVariant - sloučit do jednoho objektu
|
||||
PizzaSize:
|
||||
description: Údaje o konkrétní variantě pizzy
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- varId
|
||||
- size
|
||||
- pizzaPrice
|
||||
- boxPrice
|
||||
- price
|
||||
properties:
|
||||
varId:
|
||||
description: Unikátní identifikátor varianty pizzy
|
||||
type: integer
|
||||
size:
|
||||
description: Velikost pizzy, např. "30cm"
|
||||
type: string
|
||||
pizzaPrice:
|
||||
description: Cena samotné pizzy v Kč
|
||||
type: number
|
||||
boxPrice:
|
||||
description: Cena krabice pizzy v Kč
|
||||
type: number
|
||||
price:
|
||||
description: Celková cena (pizza + krabice)
|
||||
type: number
|
||||
Pizza:
|
||||
description: Údaje o konkrétní pizze.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- ingredients
|
||||
- sizes
|
||||
properties:
|
||||
name:
|
||||
description: Název pizzy
|
||||
type: string
|
||||
ingredients:
|
||||
description: Seznam obsažených ingrediencí
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
sizes:
|
||||
description: Dostupné velikosti pizzy
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/PizzaSize"
|
||||
PizzaVariant:
|
||||
description: Konkrétní varianta (velikost) jedné pizzy.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- varId
|
||||
- name
|
||||
- size
|
||||
- price
|
||||
properties:
|
||||
varId:
|
||||
description: Unikátní identifikátor varianty pizzy
|
||||
type: integer
|
||||
name:
|
||||
description: Název pizzy
|
||||
type: string
|
||||
size:
|
||||
description: Velikost pizzy (např. "30cm")
|
||||
type: string
|
||||
price:
|
||||
description: Cena pizzy v Kč, včetně krabice
|
||||
type: number
|
||||
PizzaOrder:
|
||||
description: Údaje o objednávce pizzy jednoho uživatele.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- customer
|
||||
- totalPrice
|
||||
- hasQr
|
||||
properties:
|
||||
customer:
|
||||
description: Jméno objednávajícího uživatele
|
||||
type: string
|
||||
pizzaList:
|
||||
description: Seznam variant pizz k objednání (typicky bývá jen jedna)
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/PizzaVariant"
|
||||
fee:
|
||||
description: Příplatek (např. za extra ingredience)
|
||||
type: object
|
||||
properties:
|
||||
text:
|
||||
description: Popis příplatku (např. "kuřecí maso navíc")
|
||||
type: string
|
||||
price:
|
||||
description: Cena příplatku v Kč
|
||||
type: number
|
||||
totalPrice:
|
||||
description: Celková cena všech objednaných pizz daného uživatele, včetně krabic a příplatků
|
||||
type: number
|
||||
hasQr:
|
||||
description: |
|
||||
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)
|
||||
note:
|
||||
description: Volitelná uživatelská poznámka pro objednávajícího (např. "bez oliv")
|
||||
type: string
|
||||
PizzaDay:
|
||||
description: Data o Pizza day pro konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
state:
|
||||
$ref: "#/components/schemas/PizzaDayState"
|
||||
creator:
|
||||
description: "Jméno zakladatele pizza day"
|
||||
type: string
|
||||
orders:
|
||||
description: Pole objednávek jednotlivých uživatelů
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/PizzaOrder"
|
||||
|
||||
# --- NOTIFIKACE ---
|
||||
UdalostEnum:
|
||||
type: string
|
||||
enum:
|
||||
- Zahájen pizza day
|
||||
- Objednána pizza
|
||||
- Jdeme na oběd
|
||||
x-enum-varnames:
|
||||
- ZAHAJENA_PIZZA
|
||||
- OBJEDNANA_PIZZA
|
||||
- JDEME_NA_OBED
|
||||
NotifikaceInput:
|
||||
type: object
|
||||
required:
|
||||
- udalost
|
||||
- user
|
||||
properties:
|
||||
udalost:
|
||||
$ref: "#/components/schemas/UdalostEnum"
|
||||
user:
|
||||
type: string
|
||||
NotifikaceData:
|
||||
type: object
|
||||
required:
|
||||
- input
|
||||
properties:
|
||||
input:
|
||||
$ref: "#/components/schemas/NotifikaceInput"
|
||||
gotify:
|
||||
type: boolean
|
||||
teams:
|
||||
type: boolean
|
||||
ntfy:
|
||||
type: boolean
|
||||
GotifyServer:
|
||||
type: object
|
||||
required:
|
||||
- server
|
||||
- api_keys
|
||||
properties:
|
||||
server:
|
||||
type: string
|
||||
api_keys:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
$ref: "./schemas/_index.yml"
|
||||
responses:
|
||||
ClientDataResponse:
|
||||
description: Aktuální data pro klienta
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ClientData"
|
||||
$ref: "./schemas/_index.yml#/ClientData"
|
||||
securitySchemes:
|
||||
bearerAuth:
|
||||
type: http
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// import { defaultPlugins } from '@hey-api/openapi-ts';
|
||||
import { defaultPlugins } from '@hey-api/openapi-ts';
|
||||
|
||||
export default {
|
||||
input: 'api.yml',
|
||||
output: 'gen',
|
||||
plugins: [
|
||||
// ...defaultPlugins,
|
||||
// '@hey-api/client-fetch',
|
||||
...defaultPlugins,
|
||||
'@hey-api/client-fetch',
|
||||
{
|
||||
enums: 'javascript',
|
||||
name: '@hey-api/typescript',
|
||||
|
||||
18
types/paths/easterEggs/easterEgg.yml
Normal file
18
types/paths/easterEggs/easterEgg.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
get:
|
||||
operationId: getEasterEggImage
|
||||
summary: Vrátí obrázek konkrétního easter eggu
|
||||
parameters:
|
||||
- in: path
|
||||
name: url
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: URL easter eggu
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
image/png:
|
||||
description: Obrázek easter eggu
|
||||
schema:
|
||||
type: string
|
||||
format: binary
|
||||
9
types/paths/easterEggs/easterEggs.yml
Normal file
9
types/paths/easterEggs/easterEggs.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
get:
|
||||
operationId: getEasterEgg
|
||||
summary: Vrátí náhodně metadata jednoho z definovaných easter egg obrázků pro přihlášeného uživatele, nebo nic, pokud žádné definované nemá.
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/EasterEgg"
|
||||
20
types/paths/food/addChoice.yml
Normal file
20
types/paths/food/addChoice.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
post:
|
||||
operationId: addChoice
|
||||
summary: Přidání či nahrazení volby uživatele pro zvolený den/podnik
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- locationKey
|
||||
properties:
|
||||
locationKey:
|
||||
$ref: "../../schemas/_index.yml#/LunchChoice"
|
||||
dayIndex:
|
||||
$ref: "../../schemas/_index.yml#/DayIndex"
|
||||
foodIndex:
|
||||
$ref: "../../schemas/_index.yml#/FoodIndex"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../../api.yml#/components/responses/ClientDataResponse"
|
||||
16
types/paths/food/changeDepartureTime.yml
Normal file
16
types/paths/food/changeDepartureTime.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
post:
|
||||
operationId: changeDepartureTime
|
||||
summary: Úprava preferovaného času odchodu do aktuálně zvoleného podniku.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
properties:
|
||||
dayIndex:
|
||||
$ref: "../../schemas/_index.yml#/DayIndex"
|
||||
time:
|
||||
$ref: "../../schemas/_index.yml#/DepartureTime"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../../api.yml#/components/responses/ClientDataResponse"
|
||||
6
types/paths/food/jdemeObed.yml
Normal file
6
types/paths/food/jdemeObed.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: jdemeObed
|
||||
summary: Odeslání notifikací "jdeme na oběd" dle konfigurace.
|
||||
responses:
|
||||
"200":
|
||||
description: Notifikace byly odeslány.
|
||||
21
types/paths/food/removeChoice.yml
Normal file
21
types/paths/food/removeChoice.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
post:
|
||||
operationId: removeChoice
|
||||
summary: Odstranění jednoho zvoleného jídla uživatele pro zvolený den/podnik
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- foodIndex
|
||||
- locationKey
|
||||
properties:
|
||||
foodIndex:
|
||||
$ref: "../../schemas/_index.yml#/FoodIndex"
|
||||
locationKey:
|
||||
$ref: "../../schemas/_index.yml#/LunchChoice"
|
||||
dayIndex:
|
||||
$ref: "../../schemas/_index.yml#/DayIndex"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../../api.yml#/components/responses/ClientDataResponse"
|
||||
18
types/paths/food/removeChoices.yml
Normal file
18
types/paths/food/removeChoices.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
post:
|
||||
operationId: removeChoices
|
||||
summary: Odstranění volby uživatele pro zvolený den/podnik, včetně případných jídel
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- locationKey
|
||||
properties:
|
||||
locationKey:
|
||||
$ref: "../../schemas/_index.yml#/LunchChoice"
|
||||
dayIndex:
|
||||
$ref: "../../schemas/_index.yml#/DayIndex"
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../../api.yml#/components/responses/ClientDataResponse"
|
||||
16
types/paths/food/updateNote.yml
Normal file
16
types/paths/food/updateNote.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
post:
|
||||
operationId: updateNote
|
||||
summary: Nastavení poznámky k volbě uživatele
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
properties:
|
||||
dayIndex:
|
||||
$ref: "../../schemas/_index.yml#/DayIndex"
|
||||
note:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../../api.yml#/components/responses/ClientDataResponse"
|
||||
14
types/paths/getData.yml
Normal file
14
types/paths/getData.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
get:
|
||||
operationId: getData
|
||||
summary: Načtení klientských dat pro aktuální nebo předaný den
|
||||
parameters:
|
||||
- in: query
|
||||
name: dayIndex
|
||||
description: Index dne v týdnu. Pokud není předán, je použit aktuální den.
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 0
|
||||
maximum: 4
|
||||
responses:
|
||||
"200":
|
||||
$ref: "../api.yml#/components/responses/ClientDataResponse"
|
||||
19
types/paths/getPizzaQr.yml
Normal file
19
types/paths/getPizzaQr.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
get:
|
||||
operationId: getPizzaQr
|
||||
summary: Získání QR kódu pro platbu za Pizza day
|
||||
security: [] # Nevyžaduje autentizaci
|
||||
parameters:
|
||||
- in: query
|
||||
name: login
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
description: Přihlašovací jméno uživatele, pro kterého bude vrácen QR kód
|
||||
responses:
|
||||
"200":
|
||||
description: Vygenerovaný QR kód pro platbu
|
||||
content:
|
||||
image/png:
|
||||
schema:
|
||||
type: string
|
||||
format: binary
|
||||
20
types/paths/login.yml
Normal file
20
types/paths/login.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
post:
|
||||
operationId: login
|
||||
summary: Přihlášení uživatele
|
||||
security: [] # Nevyžaduje autentizaci
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
description: Přihlašovací jméno uživatele. Vyžadováno pouze pokud není předáno pomocí hlaviček.
|
||||
responses:
|
||||
"200":
|
||||
description: Přihlášení bylo úspěšné
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../schemas/_index.yml#/JWTToken"
|
||||
21
types/paths/pizzaDay/addPizza.yml
Normal file
21
types/paths/pizzaDay/addPizza.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
post:
|
||||
operationId: addPizza
|
||||
summary: Přidání pizzy do objednávky.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- pizzaIndex
|
||||
- pizzaSizeIndex
|
||||
properties:
|
||||
pizzaIndex:
|
||||
description: Index pizzy v nabídce
|
||||
type: integer
|
||||
pizzaSizeIndex:
|
||||
description: Index velikosti pizzy v nabídce variant
|
||||
type: integer
|
||||
responses:
|
||||
"200":
|
||||
description: Přidání pizzy do objednávky proběhlo úspěšně.
|
||||
6
types/paths/pizzaDay/create.yml
Normal file
6
types/paths/pizzaDay/create.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: createPizzaDay
|
||||
summary: Založení pizza day.
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl založen.
|
||||
6
types/paths/pizzaDay/delete.yml
Normal file
6
types/paths/pizzaDay/delete.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: deletePizzaDay
|
||||
summary: Smazání pizza day.
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl smazán.
|
||||
18
types/paths/pizzaDay/finishDelivery.yml
Normal file
18
types/paths/pizzaDay/finishDelivery.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
post:
|
||||
operationId: finishDelivery
|
||||
summary: Převod pizza day do stavu "Pizzy byly doručeny". Pokud má objednávající nastaveno číslo účtu, je ostatním uživatelům vygenerován a následně zobrazen QR kód pro úhradu jejich objednávky.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
properties:
|
||||
bankAccount:
|
||||
description: Číslo bankovního účtu objednávajícího
|
||||
type: string
|
||||
bankAccountHolder:
|
||||
description: Jméno majitele bankovního účtu
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl přepnut do stavu "Pizzy doručeny".
|
||||
6
types/paths/pizzaDay/finishOrder.yml
Normal file
6
types/paths/pizzaDay/finishOrder.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: finishOrder
|
||||
summary: Přepnutí pizza day do stavu "Pizzy objednány". Není možné měnit objednávky, příslušným uživatelům je odeslána notifikace o provedené objednávce.
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl přepnut do stavu "Pizzy objednány".
|
||||
6
types/paths/pizzaDay/lock.yml
Normal file
6
types/paths/pizzaDay/lock.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: lockPizzaDay
|
||||
summary: Uzamkne pizza day. Nebude možné přidávat či odebírat pizzy.
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl uzamčen.
|
||||
16
types/paths/pizzaDay/removePizza.yml
Normal file
16
types/paths/pizzaDay/removePizza.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
post:
|
||||
operationId: removePizza
|
||||
summary: Odstranění pizzy z objednávky.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- pizzaOrder
|
||||
properties:
|
||||
pizzaOrder:
|
||||
$ref: "../../schemas/_index.yml#/PizzaVariant"
|
||||
responses:
|
||||
"200":
|
||||
description: Odstranění pizzy z objednávky proběhlo úspěšně.
|
||||
6
types/paths/pizzaDay/unlock.yml
Normal file
6
types/paths/pizzaDay/unlock.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
post:
|
||||
operationId: unlockPizzaDay
|
||||
summary: Odemkne pizza day. Bude opět možné přidávat či odebírat pizzy.
|
||||
responses:
|
||||
"200":
|
||||
description: Pizza day byl odemčen.
|
||||
15
types/paths/pizzaDay/updatePizzaDayNote.yml
Normal file
15
types/paths/pizzaDay/updatePizzaDayNote.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
post:
|
||||
operationId: updatePizzaDayNote
|
||||
summary: Nastavení poznámky k objednávkám pizz přihlášeného uživatele.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
properties:
|
||||
note:
|
||||
type: string
|
||||
description: Poznámka k objednávkám pizz, např "bez oliv".
|
||||
responses:
|
||||
"200":
|
||||
description: Nastavení poznámky k objednávkám pizz proběhlo úspěšně.
|
||||
23
types/paths/pizzaDay/updatePizzaFee.yml
Normal file
23
types/paths/pizzaDay/updatePizzaFee.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
post:
|
||||
operationId: updatePizzaFee
|
||||
summary: Nastavení přirážky/slevy k objednávce pizz uživatele.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
required:
|
||||
- login
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
description: Login cíleného uživatele
|
||||
text:
|
||||
type: string
|
||||
description: Textový popis přirážky/slevy
|
||||
price:
|
||||
type: number
|
||||
description: Částka přirážky/slevy v Kč
|
||||
responses:
|
||||
"200":
|
||||
description: Nastavení přirážky/slevy proběhlo úspěšně.
|
||||
23
types/paths/stats/stats.yml
Normal file
23
types/paths/stats/stats.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
get:
|
||||
operationId: getStats
|
||||
summary: Vrátí statistiky způsobu stravování pro předaný rozsah dat.
|
||||
parameters:
|
||||
- in: query
|
||||
name: startDate
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: Počáteční datum pro načtení statistik
|
||||
- in: query
|
||||
name: endDate
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: Koncové datum pro načtení statistik
|
||||
responses:
|
||||
"200":
|
||||
description: Statistiky způsobu stravování. Každý prvek v poli představuje statistiky pro jeden den z předaného rozsahu dat.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/WeeklyStats"
|
||||
11
types/paths/voting/getVotes.yml
Normal file
11
types/paths/voting/getVotes.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
get:
|
||||
operationId: getVotes
|
||||
summary: Vrátí statistiky hlasování o nových funkcích.
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/FeatureRequest"
|
||||
19
types/paths/voting/updateVote.yml
Normal file
19
types/paths/voting/updateVote.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
post:
|
||||
operationId: updateVote
|
||||
summary: Aktualizuje hlasování uživatele o dané funkcionalitě.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
option:
|
||||
description: Hlasovací možnost, kterou uživatel zvolil.
|
||||
$ref: "../../schemas/_index.yml#/FeatureRequest"
|
||||
active:
|
||||
type: boolean
|
||||
description: True, pokud uživatel hlasoval pro, jinak false.
|
||||
responses:
|
||||
"200":
|
||||
description: Hlasování bylo úspěšně aktualizováno.
|
||||
521
types/schemas/_index.yml
Normal file
521
types/schemas/_index.yml
Normal file
@@ -0,0 +1,521 @@
|
||||
# --- OBECNÉ ---
|
||||
JWTToken:
|
||||
type: object
|
||||
description: Klientský JWT token pro autentizaci a autorizaci
|
||||
required:
|
||||
- login
|
||||
- trusted
|
||||
- iat
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
description: Přihlašovací jméno uživatele
|
||||
trusted:
|
||||
type: boolean
|
||||
description: Příznak, zda se jedná o uživatele ověřeného doménovým přihlášením
|
||||
iat:
|
||||
type: number
|
||||
description: Časové razítko vydání tokenu
|
||||
ClientData:
|
||||
description: Klientská data pro jeden konkrétní den. Obsahuje menu všech načtených podniků a volby jednotlivých uživatelů.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- todayDayIndex
|
||||
- date
|
||||
- isWeekend
|
||||
- choices
|
||||
properties:
|
||||
todayDayIndex:
|
||||
description: Index dnešního dne v týdnu
|
||||
$ref: "#/DayIndex"
|
||||
date:
|
||||
description: Human-readable datum dne
|
||||
type: string
|
||||
isWeekend:
|
||||
description: Příznak, zda je tento den víkend
|
||||
type: boolean
|
||||
dayIndex:
|
||||
description: Index dne v týdnu, ke kterému se vztahují tato data
|
||||
$ref: "#/DayIndex"
|
||||
choices:
|
||||
$ref: "#/LunchChoices"
|
||||
menus:
|
||||
$ref: "#/RestaurantDayMenuMap"
|
||||
pizzaDay:
|
||||
$ref: "#/PizzaDay"
|
||||
pizzaList:
|
||||
description: Seznam dostupných pizz pro předaný den
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/Pizza"
|
||||
pizzaListLastUpdate:
|
||||
description: Datum a čas poslední aktualizace pizz
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
# --- OBĚDY ---
|
||||
UserLunchChoice:
|
||||
description: 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.
|
||||
additionalProperties: false
|
||||
properties:
|
||||
# TODO toto je tu z dost špatného důvodu, viz použití - mělo by se místo toho z loginu zjišťovat zda je uživatel trusted
|
||||
trusted:
|
||||
description: Příznak, zda byla tato volba provedena uživatelem ověřeným doménovým přihlášením
|
||||
type: boolean
|
||||
selectedFoods:
|
||||
description: Pole indexů vybraných jídel v rámci dané restaurace. Index představuje pořadí jídla v menu dané restaurace.
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
departureTime:
|
||||
description: Čas preferovaného odchodu do dané restaurace v human-readable formátu (např. 12:00)
|
||||
type: string
|
||||
note:
|
||||
description: Volitelná, veřejně viditelná uživatelská poznámka k vybrané volbě
|
||||
type: string
|
||||
LocationLunchChoicesMap:
|
||||
description: Objekt, kde klíčem je možnost stravování ((#LunchChoice)) a hodnotou množina uživatelů s touto volbou ((#LunchChoices)).
|
||||
type: object
|
||||
additionalProperties:
|
||||
$ref: "#/UserLunchChoice"
|
||||
LunchChoices:
|
||||
description: Objekt, představující volby všech uživatelů pro konkrétní den. Klíčem je (#LunchChoice).
|
||||
type: object
|
||||
properties:
|
||||
SLADOVNICKA:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
TECHTOWER:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
ZASTAVKAUMICHALA:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
SENKSERIKOVA:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
SPSE:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
PIZZA:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
OBJEDNAVAM:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
NEOBEDVAM:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
ROZHODUJI:
|
||||
$ref: "#/LocationLunchChoicesMap"
|
||||
Restaurant:
|
||||
description: Stravovací zařízení (restaurace, jídelna, hospoda, ...)
|
||||
type: string
|
||||
enum:
|
||||
- SLADOVNICKA
|
||||
- TECHTOWER
|
||||
- ZASTAVKAUMICHALA
|
||||
- SENKSERIKOVA
|
||||
LunchChoice:
|
||||
description: Konkrétní možnost stravování (konkrétní restaurace, pizza day, objednání, neobědvání, rozhodování se, ...)
|
||||
type: string
|
||||
enum:
|
||||
- SLADOVNICKA
|
||||
- TECHTOWER
|
||||
- ZASTAVKAUMICHALA
|
||||
- SENKSERIKOVA
|
||||
- SPSE
|
||||
- PIZZA
|
||||
- OBJEDNAVAM
|
||||
- NEOBEDVAM
|
||||
- ROZHODUJI
|
||||
DayIndex:
|
||||
description: Index dne v týdnu (0 = pondělí, 4 = pátek)
|
||||
type: integer
|
||||
minimum: 0
|
||||
maximum: 4
|
||||
FoodIndex:
|
||||
description: Pořadový index jídla v menu konkrétní restaurace
|
||||
type: integer
|
||||
minimum: 0
|
||||
Food:
|
||||
description: Konkrétní jídlo z menu restaurace
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- isSoup
|
||||
properties:
|
||||
amount:
|
||||
description: Množství standardní porce, např. 0,33l nebo 150g
|
||||
type: string
|
||||
name:
|
||||
description: Název/popis jídla
|
||||
type: string
|
||||
price:
|
||||
description: Cena ve formátu '135 Kč'
|
||||
type: string
|
||||
isSoup:
|
||||
description: Příznak, zda se jedná o polévku
|
||||
type: boolean
|
||||
RestaurantDayMenu:
|
||||
description: Menu restaurace na konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
lastUpdate:
|
||||
description: UNIX timestamp poslední aktualizace menu
|
||||
type: integer
|
||||
closed:
|
||||
description: Příznak, zda je daný podnik v daný den zavřený
|
||||
type: boolean
|
||||
food:
|
||||
description: Seznam jídel pro daný den
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/Food"
|
||||
RestaurantDayMenuMap:
|
||||
description: Objekt, kde klíčem je podnik ((#Restaurant)) a hodnotou denní menu daného podniku ((#RestaurantDayMenu))
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
SLADOVNICKA:
|
||||
$ref: "#/RestaurantDayMenu"
|
||||
TECHTOWER:
|
||||
$ref: "#/RestaurantDayMenu"
|
||||
ZASTAVKAUMICHALA:
|
||||
$ref: "#/RestaurantDayMenu"
|
||||
SENKSERIKOVA:
|
||||
$ref: "#/RestaurantDayMenu"
|
||||
WeekMenu:
|
||||
description: 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.
|
||||
type: array
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
items:
|
||||
$ref: "#/RestaurantDayMenuMap"
|
||||
DepartureTime:
|
||||
description: Preferovaný čas odchodu na oběd
|
||||
type: string
|
||||
enum:
|
||||
- "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"
|
||||
x-enum-varnames:
|
||||
- T10_00
|
||||
- T10_15
|
||||
- T10_30
|
||||
- T10_45
|
||||
- T11_00
|
||||
- T11_15
|
||||
- T11_30
|
||||
- T11_45
|
||||
- T12_00
|
||||
- T12_15
|
||||
- T12_30
|
||||
- T12_45
|
||||
- T13_00
|
||||
|
||||
# --- HLASOVÁNÍ ---
|
||||
FeatureRequest:
|
||||
type: string
|
||||
enum:
|
||||
- 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
|
||||
x-enum-varnames:
|
||||
- CUSTOM_QR
|
||||
- FAVORITES
|
||||
- SINGLE_PAYMENT
|
||||
- NO_WEEKENDS
|
||||
- QR_FOREVER
|
||||
- PIZZA_PICTURES
|
||||
- STATISTICS
|
||||
- RESPONSIVITY
|
||||
- SECURITY
|
||||
- SAFETY
|
||||
- UI
|
||||
- DEVELOPMENT
|
||||
|
||||
# --- EASTER EGGS ---
|
||||
EasterEgg:
|
||||
description: Data pro zobrazení easter eggů ssss
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- path
|
||||
- url
|
||||
- startOffset
|
||||
- endOffset
|
||||
- duration
|
||||
properties:
|
||||
path:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
startOffset:
|
||||
type: number
|
||||
endOffset:
|
||||
type: number
|
||||
duration:
|
||||
type: number
|
||||
width:
|
||||
type: string
|
||||
zIndex:
|
||||
type: integer
|
||||
position:
|
||||
type: string
|
||||
enum:
|
||||
- absolute
|
||||
animationName:
|
||||
type: string
|
||||
animationDuration:
|
||||
type: string
|
||||
animationTimingFunction:
|
||||
type: string
|
||||
|
||||
# --- STATISTIKY ---
|
||||
LocationStats:
|
||||
description: Objekt, kde klíčem je zvolená možnost a hodnotou počet uživatelů, kteří tuto možnosti zvolili
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
# Bohužel OpenAPI neumí nadefinovat objekt, kde klíčem může být pouze hodnota existujícího enumu :(
|
||||
SLADOVNICKA:
|
||||
type: number
|
||||
TECHTOWER:
|
||||
type: number
|
||||
ZASTAVKAUMICHALA:
|
||||
type: number
|
||||
SENKSERIKOVA:
|
||||
type: number
|
||||
SPSE:
|
||||
type: number
|
||||
PIZZA:
|
||||
type: number
|
||||
OBJEDNAVAM:
|
||||
type: number
|
||||
NEOBEDVAM:
|
||||
type: number
|
||||
ROZHODUJI:
|
||||
type: number
|
||||
DailyStats:
|
||||
description: Statistika vybraných možností pro jeden konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- locations
|
||||
properties:
|
||||
date:
|
||||
description: Datum v human-readable formátu
|
||||
type: string
|
||||
locations:
|
||||
$ref: "#/LocationStats"
|
||||
WeeklyStats:
|
||||
description: 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)
|
||||
type: array
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
items:
|
||||
$ref: "#/DailyStats"
|
||||
|
||||
# --- PIZZA DAY ---
|
||||
PizzaDayState:
|
||||
description: Stav pizza day
|
||||
type: string
|
||||
enum:
|
||||
- Pizza day nebyl založen
|
||||
- Pizza day je založen
|
||||
- Objednávky uzamčeny
|
||||
- Pizzy objednány
|
||||
- Pizzy doručeny
|
||||
x-enum-varnames:
|
||||
- NOT_CREATED
|
||||
- CREATED
|
||||
- LOCKED
|
||||
- ORDERED
|
||||
- DELIVERED
|
||||
# TODO toto je jen rozšířená varianta PizzaVariant - sloučit do jednoho objektu
|
||||
PizzaSize:
|
||||
description: Údaje o konkrétní variantě pizzy
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- varId
|
||||
- size
|
||||
- pizzaPrice
|
||||
- boxPrice
|
||||
- price
|
||||
properties:
|
||||
varId:
|
||||
description: Unikátní identifikátor varianty pizzy
|
||||
type: integer
|
||||
size:
|
||||
description: Velikost pizzy, např. "30cm"
|
||||
type: string
|
||||
pizzaPrice:
|
||||
description: Cena samotné pizzy v Kč
|
||||
type: number
|
||||
boxPrice:
|
||||
description: Cena krabice pizzy v Kč
|
||||
type: number
|
||||
price:
|
||||
description: Celková cena (pizza + krabice)
|
||||
type: number
|
||||
Pizza:
|
||||
description: Údaje o konkrétní pizze.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- ingredients
|
||||
- sizes
|
||||
properties:
|
||||
name:
|
||||
description: Název pizzy
|
||||
type: string
|
||||
ingredients:
|
||||
description: Seznam obsažených ingrediencí
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
sizes:
|
||||
description: Dostupné velikosti pizzy
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PizzaSize"
|
||||
PizzaVariant:
|
||||
description: Konkrétní varianta (velikost) jedné pizzy.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- varId
|
||||
- name
|
||||
- size
|
||||
- price
|
||||
properties:
|
||||
varId:
|
||||
description: Unikátní identifikátor varianty pizzy
|
||||
type: integer
|
||||
name:
|
||||
description: Název pizzy
|
||||
type: string
|
||||
size:
|
||||
description: Velikost pizzy (např. "30cm")
|
||||
type: string
|
||||
price:
|
||||
description: Cena pizzy v Kč, včetně krabice
|
||||
type: number
|
||||
PizzaOrder:
|
||||
description: Údaje o objednávce pizzy jednoho uživatele.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- customer
|
||||
- totalPrice
|
||||
- hasQr
|
||||
properties:
|
||||
customer:
|
||||
description: Jméno objednávajícího uživatele
|
||||
type: string
|
||||
pizzaList:
|
||||
description: Seznam variant pizz k objednání (typicky bývá jen jedna)
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PizzaVariant"
|
||||
fee:
|
||||
description: Příplatek (např. za extra ingredience)
|
||||
type: object
|
||||
properties:
|
||||
text:
|
||||
description: Popis příplatku (např. "kuřecí maso navíc")
|
||||
type: string
|
||||
price:
|
||||
description: Cena příplatku v Kč
|
||||
type: number
|
||||
totalPrice:
|
||||
description: Celková cena všech objednaných pizz daného uživatele, včetně krabic a příplatků
|
||||
type: number
|
||||
hasQr:
|
||||
description: |
|
||||
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)
|
||||
note:
|
||||
description: Volitelná uživatelská poznámka pro objednávajícího (např. "bez oliv")
|
||||
type: string
|
||||
PizzaDay:
|
||||
description: Data o Pizza day pro konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
state:
|
||||
$ref: "#/PizzaDayState"
|
||||
creator:
|
||||
description: "Jméno zakladatele pizza day"
|
||||
type: string
|
||||
orders:
|
||||
description: Pole objednávek jednotlivých uživatelů
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PizzaOrder"
|
||||
|
||||
# --- NOTIFIKACE ---
|
||||
UdalostEnum:
|
||||
type: string
|
||||
enum:
|
||||
- Zahájen pizza day
|
||||
- Objednána pizza
|
||||
- Jdeme na oběd
|
||||
x-enum-varnames:
|
||||
- ZAHAJENA_PIZZA
|
||||
- OBJEDNANA_PIZZA
|
||||
- JDEME_NA_OBED
|
||||
NotifikaceInput:
|
||||
type: object
|
||||
required:
|
||||
- udalost
|
||||
- user
|
||||
properties:
|
||||
udalost:
|
||||
$ref: "#/UdalostEnum"
|
||||
user:
|
||||
type: string
|
||||
NotifikaceData:
|
||||
type: object
|
||||
required:
|
||||
- input
|
||||
properties:
|
||||
input:
|
||||
$ref: "#/NotifikaceInput"
|
||||
gotify:
|
||||
type: boolean
|
||||
teams:
|
||||
type: boolean
|
||||
ntfy:
|
||||
type: boolean
|
||||
GotifyServer:
|
||||
type: object
|
||||
required:
|
||||
- server
|
||||
- api_keys
|
||||
properties:
|
||||
server:
|
||||
type: string
|
||||
api_keys:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
Reference in New Issue
Block a user