feat: večeře (extra meal slot) — dokončení, sync s masterem
CI / Generate TypeScript types (push) Successful in 34s
CI / Build server (push) Successful in 33s
CI / Server unit tests (push) Successful in 1m11s
CI / Build client (push) Successful in 33s
CI / Playwright E2E tests (push) Successful in 1m20s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 2s

- Nová stránka /vecere pro evidenci extra jídla (večeře/pozdní oběd)
- MealSlot enum (obed/extra), oddělený storage namespace YYYY-MM-DD_extra
- slot parametr na všech food endpointech a GET /api/data
- Push reminder: přechod na 60min cooldown, login v payloadu místo endpointu
- Smazány chybně přidané root package.json + package-lock.json (gitnexus)
- server: slot?: string → slot?: MealSlot, literály nahrazeny enum konstantami
- Přidány Jest testy izolace extra/obed storage namespace
This commit is contained in:
2026-05-06 20:14:47 +02:00
96 changed files with 3582 additions and 4289 deletions
+4
View File
@@ -77,6 +77,10 @@ paths:
/voting/stats:
$ref: "./paths/voting/getVotingStats.yml"
# Changelog (/api/changelogs)
/changelogs:
$ref: "./paths/changelogs/getChangelogs.yml"
# DEV endpointy (/api/dev)
/dev/generate:
$ref: "./paths/dev/generate.yml"
+21
View File
@@ -0,0 +1,21 @@
get:
operationId: getChangelogs
summary: Vrátí seznam změn (changelog). Pokud není předáno datum, vrátí všechny změny. Pokud je předáno datum, vrátí pouze změny po tomto datu.
parameters:
- in: query
name: since
required: false
schema:
type: string
description: Datum (formát YYYY-MM-DD) od kterého se mají vrátit změny (exkluzivně). Pokud není předáno, vrátí se všechny změny.
responses:
"200":
description: Slovník kde klíčem je datum (YYYY-MM-DD) a hodnotou seznam změn k danému datu. Seřazeno od nejnovějšího po nejstarší.
content:
application/json:
schema:
type: object
additionalProperties:
type: array
items:
type: string
+7 -1
View File
@@ -1,6 +1,6 @@
get:
operationId: getPizzaQr
summary: Získání QR kódu pro platbu za Pizza day
summary: Získání QR kódu pro platbu
security: [] # Nevyžaduje autentizaci
parameters:
- in: query
@@ -9,6 +9,12 @@ get:
type: string
required: true
description: Přihlašovací jméno uživatele, pro kterého bude vrácen QR kód
- in: query
name: id
schema:
type: string
required: true
description: Unikátní identifikátor QR kódu (z PendingQr.id)
responses:
"200":
description: Vygenerovaný QR kód pro platbu
+7 -7
View File
@@ -1,21 +1,21 @@
post:
operationId: addPizza
summary: Přidání pizzy do objednávky.
summary: Přidání pizzy nebo salátu do objednávky.
requestBody:
required: true
content:
application/json:
schema:
required:
- pizzaIndex
- pizzaSizeIndex
properties:
pizzaIndex:
description: Index pizzy v nabídce
description: Index pizzy v nabídce (pro přidání pizzy)
type: integer
pizzaSizeIndex:
description: Index velikosti pizzy v nabídce variant
description: Index velikosti pizzy v nabídce variant (pro přidání pizzy)
type: integer
salatIndex:
description: Index salátu v nabídce (pro přidání salátu)
type: integer
responses:
"200":
description: Přidání pizzy do objednávky proběhlo úspěšně.
description: Přidání pizzy nebo salátu do objednávky proběhlo úspěšně.
+4 -4
View File
@@ -1,17 +1,17 @@
post:
operationId: dismissQr
summary: Označí QR kód pro daný den jako uhrazený (odstraní ho ze seznamu nevyřízených).
summary: Označí QR kód jako uhrazený (odstraní ho ze seznamu nevyřízených).
requestBody:
required: true
content:
application/json:
schema:
properties:
date:
description: Datum Pizza day, ke kterému se QR kód vztahuje
id:
description: Unikátní identifikátor QR kódu (z PendingQr.id)
type: string
required:
- date
- id
responses:
"200":
description: QR kód byl označen jako uhrazený.
+44 -8
View File
@@ -53,6 +53,11 @@ ClientData:
description: Datum a čas poslední aktualizace pizz
type: string
format: date-time
salatList:
description: Seznam dostupných salátů pro předaný den
type: array
items:
$ref: "#/Salat"
pendingQrs:
description: Nevyřízené QR kódy pro platbu z předchozích pizza day
type: array
@@ -198,6 +203,9 @@ RestaurantDayMenu:
type: array
items:
type: string
isStale:
description: Příznak, zda data mohou pocházet z jiného týdne
type: boolean
RestaurantDayMenuMap:
description: Objekt, kde klíčem je podnik ((#Restaurant)) a hodnotou denní menu daného podniku ((#RestaurantDayMenu))
type: object
@@ -435,7 +443,7 @@ Pizza:
items:
$ref: "#/PizzaSize"
PizzaVariant:
description: Konkrétní varianta (velikost) jedné pizzy.
description: Konkrétní varianta (velikost) jedné pizzy nebo salátu.
type: object
additionalProperties: false
required:
@@ -445,16 +453,40 @@ PizzaVariant:
- price
properties:
varId:
description: Unikátní identifikátor varianty pizzy
description: Unikátní identifikátor varianty
type: integer
name:
description: Název pizzy
description: Název pizzy nebo salátu
type: string
size:
description: Velikost pizzy (např. "30cm")
description: Velikost pizzy (např. "30cm"), nebo "1 porce" pro salát
type: string
price:
description: Cena pizzy v Kč, včetně krabice
description: Cena v Kč, včetně krabice/obalu
type: number
category:
description: Kategorie položky (pizza nebo salat)
type: string
enum: [pizza, salat]
Salat:
description: Salát z nabídky Pizza Chefie
type: object
additionalProperties: false
required:
- name
- ingredients
- price
properties:
name:
description: Název salátu
type: string
ingredients:
description: Seznam obsažených ingrediencí
type: array
items:
type: string
price:
description: Cena salátu v Kč (bez obalu)
type: number
PizzaOrder:
description: Údaje o objednávce pizzy jednoho uživatele.
@@ -644,19 +676,23 @@ ClearMockDataRequest:
# --- NEVYŘÍZENÉ QR KÓDY ---
PendingQr:
description: Nevyřízený QR kód pro platbu z předchozího Pizza day
description: Nevyřízený QR kód pro platbu
type: object
additionalProperties: false
required:
- id
- date
- creator
- totalPrice
properties:
id:
description: Unikátní identifikátor QR kódu (umožňuje více QR na strávníka na den)
type: string
date:
description: Datum Pizza day, ke kterému se QR kód vztahuje
description: Datum, ke kterému se QR kód vztahuje
type: string
creator:
description: Jméno zakladatele Pizza day (objednávajícího)
description: Jméno uživatele, který QR vygeneroval (příjemce platby)
type: string
totalPrice:
description: Celková cena objednávky v Kč