feat: podpora ručního generování QR kódů pro platby
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful

This commit is contained in:
2026-02-20 14:17:39 +01:00
parent a849f4e922
commit cc98c2be0d
15 changed files with 935 additions and 7 deletions

View File

@@ -10,6 +10,8 @@ paths:
$ref: "./paths/login.yml"
/qr:
$ref: "./paths/getPizzaQr.yml"
/qr/generate:
$ref: "./paths/qr/generate.yml"
/data:
$ref: "./paths/getData.yml"
@@ -75,6 +77,12 @@ paths:
/voting/stats:
$ref: "./paths/voting/getVotingStats.yml"
# DEV endpointy (/api/dev)
/dev/generate:
$ref: "./paths/dev/generate.yml"
/dev/clear:
$ref: "./paths/dev/clear.yml"
components:
schemas:
$ref: "./schemas/_index.yml"

23
types/paths/dev/clear.yml Normal file
View File

@@ -0,0 +1,23 @@
post:
operationId: clearMockData
summary: Smazání všech voleb pro daný den (pouze DEV režim)
requestBody:
required: false
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ClearMockDataRequest"
responses:
"200":
description: Data byla úspěšně smazána
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
dayIndex:
type: integer
"403":
description: Endpoint není dostupný v tomto režimu

View File

@@ -0,0 +1,25 @@
post:
operationId: generateMockData
summary: Vygenerování mock dat pro testování (pouze DEV režim)
requestBody:
required: false
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/GenerateMockDataRequest"
responses:
"200":
description: Mock data byla úspěšně vygenerována
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
count:
type: integer
dayIndex:
type: integer
"403":
description: Endpoint není dostupný v tomto režimu

View File

@@ -0,0 +1,16 @@
post:
operationId: generateQr
summary: Vygenerování QR kódů pro platbu vybraným uživatelům
requestBody:
required: true
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/GenerateQrRequest"
responses:
"200":
description: QR kódy byly úspěšně vygenerovány
"400":
description: Neplatný požadavek (chybějící nebo nevalidní data)
"401":
description: Neautentizovaný uživatel

View File

@@ -563,6 +563,70 @@ GotifyServer:
items:
type: string
# --- GENEROVÁNÍ QR KÓDŮ ---
QrRecipient:
description: Příjemce QR kódu pro platbu
type: object
additionalProperties: false
required:
- login
- purpose
- amount
properties:
login:
description: Přihlašovací jméno uživatele, kterému bude vygenerován QR kód
type: string
purpose:
description: Účel platby (např. "Pizza prosciutto")
type: string
amount:
description: Částka v Kč (kladné číslo, max 2 desetinná místa)
type: number
minimum: 0.01
GenerateQrRequest:
description: Request pro generování QR kódů
type: object
additionalProperties: false
required:
- recipients
- bankAccount
- bankAccountHolder
properties:
recipients:
description: Seznam příjemců QR kódů
type: array
items:
$ref: "#/QrRecipient"
bankAccount:
description: Číslo bankovního účtu odesílatele ve formátu BBAN
type: string
bankAccountHolder:
description: Jméno držitele bankovního účtu
type: string
# --- DEV MOCK DATA ---
GenerateMockDataRequest:
description: Request pro generování mock dat (pouze DEV režim)
type: object
additionalProperties: false
properties:
dayIndex:
description: Index dne v týdnu (0 = pondělí, 4 = pátek). Pokud není zadán, použije se aktuální den.
$ref: "#/DayIndex"
count:
description: Počet záznamů k vygenerování. Pokud není zadán, vybere se náhodný počet 5-20.
type: integer
minimum: 1
maximum: 100
ClearMockDataRequest:
description: Request pro smazání mock dat (pouze DEV režim)
type: object
additionalProperties: false
properties:
dayIndex:
description: Index dne v týdnu (0 = pondělí, 4 = pátek). Pokud není zadán, použije se aktuální den.
$ref: "#/DayIndex"
# --- NEVYŘÍZENÉ QR KÓDY ---
PendingQr:
description: Nevyřízený QR kód pro platbu z předchozího Pizza day
@@ -582,3 +646,6 @@ PendingQr:
totalPrice:
description: Celková cena objednávky v Kč
type: number
purpose:
description: Účel platby (např. "Pizza prosciutto")
type: string