feat: úhrada za všechny jednou osobou (issue #29, SINGLE_PAYMENT)
Přidává možnost, aby jeden strávník zaplatil celý účet v restauraci a ostatní
obdrželi QR kód pro refundaci.
Prerekvizita — podpora více QR kódů na (příjemce, den):
- PendingQr.id (UUID) nahrazuje deduplikaci podle data; každý QR má vlastní klíč
- QR obrázky uloženy do Redis/storage (base64) místo tmpdir — přežijí redeploy
- GET /api/qr vyžaduje ?id= parametr; dismissQr přijímá {id} místo {date}
Feature:
- Ikona 'Zaplatit za všechny' v choices-table pro každou LunchChoice (kromě
PIZZA/NEOBEDVAM/ROZHODUJI); viditelná jen při ≥2 strávnících a vyplněném účtu
- PayForAllModal: tabulka strávníků s prefillovanými cenami z menu, příplatky
per-diner, celkové dýško rozpočtené rovnoměrně, generování QR přes POST /api/qr/generate
- parsePriceCzk() helper pro parsing 'N Kč' → number
Co se nemění: POST /api/qr/generate API kontrakt, PizzaOrder.hasQr boolean
Co se mění v OpenAPI: PendingQr.id (required), getPizzaQr ?id param, dismissQr body
Co-Authored-By: opmrdkazkrtkaus <opmrdkazkrtkaus@melancholik.eu>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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ý.
|
||||
|
||||
@@ -635,19 +635,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č
|
||||
|
||||
Reference in New Issue
Block a user