feat: rozšíření chytání motýlků o progres, mince a škůdce
CI / Generate TypeScript types (push) Successful in 10s
CI / Server unit tests (push) Successful in 23s
CI / Build server (push) Successful in 27s
CI / Build client (push) Successful in 46s
CI / Playwright E2E tests (push) Successful in 1m25s
CI / Build and push Docker image (push) Successful in 44s
CI / Notify (push) Successful in 2s

- serverová perzistence statistik (mince, úrovně, zlatí motýli) + týmový žebříček
- prémiová zlatá síťka za milník (větší, magnetická, odolná proti ptákům)
- perzistentní škůdci: vosy na zaklikání a ptáci trhající síťku (F5-proof)
- placený plašič ptáků s odpočtem, denní bonus, kombo
- WOW zlatý motýl + osobní statistiky v modalu žebříčku
- oprava zobrazení ikonek (root-absolutní cesty k public assetům)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stánek Pavel
2026-07-22 11:59:17 +02:00
co-authored by Claude Opus 4.8
parent c8c5ecc60c
commit c5ca6c9d41
25 changed files with 2454 additions and 205 deletions
+16
View File
@@ -81,6 +81,22 @@ paths:
/suggestions/delete:
$ref: "./paths/suggestions/delete.yml"
# Chytání motýlků (/api/butterflies)
/butterflies:
$ref: "./paths/butterflies/getStats.yml"
/butterflies/catch:
$ref: "./paths/butterflies/catch.yml"
/butterflies/repair:
$ref: "./paths/butterflies/repair.yml"
/butterflies/killWasp:
$ref: "./paths/butterflies/killWasp.yml"
/butterflies/repellent:
$ref: "./paths/butterflies/repellent.yml"
/butterflies/tear:
$ref: "./paths/butterflies/tear.yml"
/butterflies/leaderboard:
$ref: "./paths/butterflies/leaderboard.yml"
# Changelog (/api/changelogs)
/changelogs:
$ref: "./paths/changelogs/getChangelogs.yml"
+18
View File
@@ -0,0 +1,18 @@
post:
operationId: catchButterflies
summary: >-
Zaznamená dávku nachytaných motýlů, připíše mince (základ, kombo a případný
denní bonus) a vrátí aktualizované statistiky.
requestBody:
required: true
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyCatchRequest"
responses:
"200":
description: Aktualizované statistiky a přehled připsaných odměn.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyCatchResult"
+10
View File
@@ -0,0 +1,10 @@
get:
operationId: getButterflyStats
summary: Vrátí statistiky chytání motýlků přihlášeného uživatele.
responses:
"200":
description: Statistiky chytání motýlků přihlášeného uživatele.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyStats"
+10
View File
@@ -0,0 +1,10 @@
post:
operationId: killWasp
summary: Zahubí jednu vosu (plácačkou) a zvýší statistiku zahubených vos.
responses:
"200":
description: Aktualizované statistiky po zahubení vosy.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyStats"
+17
View File
@@ -0,0 +1,17 @@
get:
operationId: getButterflyLeaderboard
summary: Vrátí žebříček nejlepších chytačů motýlů seřazený dle počtu chycených.
parameters:
- in: query
name: limit
required: false
schema:
type: integer
description: Maximální počet záznamů žebříčku (výchozí 10)
responses:
"200":
description: Žebříček chytačů motýlů.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyLeaderboard"
+14
View File
@@ -0,0 +1,14 @@
post:
operationId: repairNet
summary: >-
Zašije protrženou síťku za mince. Vrátí aktualizované statistiky, nebo 402
pokud uživatel nemá dostatek mincí.
responses:
"200":
description: Aktualizované statistiky po zaplacení opravy.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyStats"
"402":
description: Uživatel nemá dostatek mincí na opravu síťky.
+14
View File
@@ -0,0 +1,14 @@
post:
operationId: buyRepellent
summary: >-
Koupí plašič ptáků za mince vyžene všechny ptáky a po dobu platnosti brání
příletu nových. Vrátí 402 při nedostatku mincí.
responses:
"200":
description: Aktualizované statistiky po koupi plašiče.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyStats"
"402":
description: Uživatel nemá dostatek mincí na plašič.
+12
View File
@@ -0,0 +1,12 @@
post:
operationId: reportNetTorn
summary: >-
Zaznamená, že pták protrhl síťku (perzistentně, aby se stav neobešel
obnovením stránky).
responses:
"200":
description: Aktualizované statistiky s protrženou síťkou.
content:
application/json:
schema:
$ref: "../../schemas/_index.yml#/ButterflyStats"
+125
View File
@@ -926,3 +926,128 @@ PendingQr:
groupId:
description: ID skupiny objednávky, ke které QR patří
type: string
# --- CHYTÁNÍ MOTÝLKŮ ---
ButterflyStats:
description: Statistiky chytání motýlků pro jednoho uživatele
type: object
additionalProperties: false
required:
- caught
- coins
- goldenCaught
- level
- title
- wasps
- birds
- waspsKilled
- birdsScared
- repellentUntil
- netTorn
properties:
caught:
description: Celkový počet chycených motýlů
type: integer
coins:
description: Aktuální počet mincí k utracení
type: integer
goldenCaught:
description: Počet chycených vzácných zlatých motýlů
type: integer
level:
description: Aktuální úroveň sběratele (odvozená z počtu chycených)
type: integer
title:
description: Titul odpovídající aktuální úrovni
type: string
lastCatchDay:
description: Datum posledního úlovku (YYYY-MM-DD) pro denní bonus
type: string
wasps:
description: Aktuální počet poletujících vos (perzistentní, přibývají v čase)
type: integer
birds:
description: Aktuální počet poletujících ptáků (perzistentní, přibývají v čase)
type: integer
waspsKilled:
description: Celkový počet zahubených vos
type: integer
birdsScared:
description: Celkový počet vyplašených ptáků (plašičem)
type: integer
repellentUntil:
description: Časové razítko (ms epoch), do kdy platí plašič ptáků; 0 = neaktivní
type: integer
netTorn:
description: Zda je síťka aktuálně protržená (nutná placená oprava)
type: boolean
ButterflyCatchRequest:
description: Dávka nachytaných motýlů k zaznamenání
type: object
additionalProperties: false
required:
- normal
- golden
properties:
normal:
description: Počet běžných motýlů chycených v této dávce
type: integer
golden:
description: Počet zlatých motýlů chycených v této dávce
type: integer
ButterflyCatchResult:
description: Výsledek zaznamenání dávky úlovků včetně přehledu odměn
type: object
additionalProperties: false
required:
- stats
- coinsAwarded
- dailyBonusApplied
- leveledUp
- premiumUnlocked
properties:
stats:
$ref: "#/ButterflyStats"
coinsAwarded:
description: Počet mincí připsaných za tuto dávku (základ + kombo + denní bonus)
type: integer
dailyBonusApplied:
description: Zda byl v této dávce připsán denní bonus za první úlovek dne
type: boolean
leveledUp:
description: Zda uživatel touto dávkou postoupil alespoň o jednu úroveň
type: boolean
premiumUnlocked:
description: Zda uživatel touto dávkou dosáhl milníku pro prémiovou síťku
type: boolean
ButterflyLeaderboardEntry:
description: Jeden záznam v žebříčku chytačů motýlů
type: object
additionalProperties: false
required:
- login
- caught
- goldenCaught
- level
- title
properties:
login:
description: Přihlašovací jméno chytače
type: string
caught:
description: Celkový počet chycených motýlů
type: integer
goldenCaught:
description: Počet chycených zlatých motýlů
type: integer
level:
description: Aktuální úroveň sběratele
type: integer
title:
description: Titul odpovídající aktuální úrovni
type: string
ButterflyLeaderboard:
description: Žebříček chytačů motýlů seřazený sestupně dle počtu chycených
type: array
items:
$ref: "#/ButterflyLeaderboardEntry"