Kanban board tasků — filtr dle priority, labelu nebo runu.
| ID | Název | Status | Priorita | Vytvořeno |
|---|---|---|---|---|
| 23 | Wire HttpApiGroups do http-app + drop Hono mounty | Hotovo | Střední | před 37 min |
| 20 | Migrace Spot endpointů na Effect HTTP API | Hotovo | Střední | před 37 min |
| 21 | Migrace Photo endpointů na Effect HTTP API | Hotovo | Střední | před 37 min |
| 22 | Migrace Vote endpointu na Effect HTTP API | Hotovo | Střední | před 37 min |
| 16 | Backend stats endpoint Profil potřeboval real čísla místo hardcodovaných. Přibyl GET /api/users/me/stats — vrací počet spotů, recenzí, hlasů a datum registrace. 4 paralelní COUNT queries přes Effect.all, jeden D1 roundtrip. | Hotovo | Střední | před 3 h |
| 17 | Mount + OpenAPI metadata Endpoint potřeboval session ověření a živou dokumentaci. Mount pod /api/users/* za sessionMiddleware, schema UserStatsResponse v api-models a OpenAPI 3.1 metadata pro Scalar UI. | Hotovo | Střední | před 3 h |
| 18 | Profil stránka real counters Profil ukazoval jen 'X sdíleno' a hardcoded '14 lesů'. Header teď má 3 živá počítadla (sdíleno · recenzí · hlasů) + sekce 'S Hammocknookem od {měsíc rok}' z reálného joinedAt. | Hotovo | Střední | před 3 h |
| 19 | Tabs Oblíbené/Moje spoty Taby na profilu byly statické. Teď fungují přes ?tab= URL parametr — 'Moje spoty' default ukazuje cards, 'Oblíbené' prázdný state (přijde Sprint 012). 'Výlety'/'Nastavení' zůstávají vizuálně disabled. | Hotovo | Střední | před 3 h |
| 11 | Auth endpointy v dokumentaci Doposud chybělo 9 auth endpointů v dokumentaci. Doplněn celý better-auth-parity router (sign-up/sign-in email i sociální, OAuth callback, refresh, sign-out, forget+reset password, verify-email). Body shapes jako generic object placeholder s odkazem na better-auth, protože ne Effect Schema. | Hotovo | Střední | před 3 h |
| 12 | Votes endpoint v dokumentaci Hlasování (upvote/downvote) bylo neviditelné v Scalar UI. Přidán PUT endpoint s VoteInput/VoteResponse schemas — body popsán jako idempotent toggle (1 upvote, -1 downvote, 0 remove) a response counters jako celkový stav po batch update. | Hotovo | Střední | před 3 h |
| 13 | Admin endpointy v dokumentaci Admin endpointy (role flip + anonymizace) chyběly. Doplněny s tagy ['Admin'], security pro session cookie a description vysvětlující last-admin guard (403 při pokusu sundat posledního ADMINa, 409 při pokusu ho anonymizovat). | Hotovo | Střední | před 3 h |
| 14 | Memo OpenAPI dokumentu pro výkon Build celého OpenAPI dokumentu (Effect Schema → JSON Schema walk + ref rewrite) běžel při každém GET /openapi.json — zbytečný CPU cost. Přidán module-level cachedDocument; první request build-uje, další serve cached. Cold-start race je idempotent, takže safe. | Hotovo | Střední | před 3 h |
| 15 | Smoke test a uzavření sprintu Curl /openapi.json: 200 application/json, 31KB validní OpenAPI 3.1, 18 paths / 24 operations / 13 schemas. Sprint 016 hotovo, sprint.md status změněn na 'hotovo (čeká audit)'. | Hotovo | Střední | před 3 h |
| 6 | Vyčištění OpenAPI Number shape přes Schema.annotations JSON Schema výstup byl ošklivý — Schema.Number povoluje NaN/Infinity přes string encoding (anyOf branche). Swap na Schema.Finite (dedikované schema, ne jen check) tyhle větve odstraní → lat/lng/rating mají v Scalar UI čisté {type:'number'}. | Hotovo | Střední | před 4 h |
| 7 | OpenAPI metadata pro zbývající Spots endpointy Spots měly hand-tagged jen GET list (R059 PoC). Doplněno POST /api/spots, GET /api/spots/{id}, PATCH /api/spots/{id}, DELETE /api/spots/{id} — security pro auth-protected, response refs na Spot.* schemas, error responses 400/401/403/404 dokumentovány. | Hotovo | Střední | před 4 h |
| 8 | OpenAPI metadata pro Photos endpointy Tři Photos endpointy chyběly v dokumentaci — POST link userFile ke spotu, GET list (s visitorOnly filtrem co odděluje hero galerii od galerie návštěvníků), DELETE unlink (multi-owner check: file owner / spot owner / ADMIN). Photo.* schemas přidány do components. | Hotovo | Střední | před 4 h |
| 9 | OpenAPI metadata pro Reviews endpointy Čtyři Reviews endpointy doplněny: POST + GET pod /api/spots/{spotId}/reviews, PATCH + DELETE top-level /api/reviews/{reviewId}. Doc původně zmiňoval že ADMIN nesmí PATCH cizí recenze — code skutečně dovoluje, opraveno v review fází. Review.* schemas v components. | Hotovo | Střední | před 4 h |
| 10 | Smoke OpenAPI spec + automatické checky Curl /openapi.json vrátil 200 application/json (23KB validní OpenAPI 3.1, 6 paths / 12 operations / 11 named schemas). SpotResponse.lat má teď shape {type:'number'} bez anyOf NaN/Infinity větví. Typecheck/oxlint čistý, 35/35 vitest pass. | Hotovo | Střední | před 4 h |
| 3 | Hand-tagged metadata pro endpoint seznamu spotů Endpoint pro list spotů (12 query params, response refs na SpotListResponse) je první a vzor pro R060/R061. Tagy, summary, parameters jsou ručně — Effect Schema neumí URL routing, takže path/query metadata se píší per-route. | Hotovo | Střední | před 4 h |
| 4 | Mount Scalar UI a OpenAPI JSON endpointu Routes /docs (Scalar UI) a /openapi.json (runtime spec) namountovány v app.ts mimo blok session middleware — jsou public, žádný auth pro doc browsing. Pozice mimo chained routes const je záměr (nepatří do Hono RPC AppType, web wrapper je nepotřebuje). | Hotovo | Střední | před 4 h |
| 5 | Manual smoke /docs UI curl /openapi.json vrátil 200 application/json (16KB validní OpenAPI 3.1: openapi/info/servers/components/paths). curl /docs vrátil 200 text/html (Scalar HTML shell). Typecheck/oxlint čistý, 35/35 vitest pass. | Hotovo | Střední | před 4 h |
| 1 | Cleanup mrtvých OpenAPI zbytků a instalace Scalar Kořenový openapi.json byl mrtvý NestJS dump z dob před přepisem na Hono. generate-openapi script ukazoval na neexistující soubor a táhl s sebou jiti devDep. Vše smazáno (api + root), místo file dumpu nasazujeme runtime endpoint. @scalar/hono-api-reference instalován jako základ pro UI. | Hotovo | Střední | před 4 h |
| 2 | OpenAPI document builder s validací Effect Schema converter Effect Schema (single source of truth pro DTO) se převádí na OpenAPI components přes builtin converter. Vlastní openapi.ts builder volá Schema.toJsonSchemaDocument na pojmenované schemas a toMultiDocumentOpenApi3_1 přepíše refy do OpenAPI tvaru. Bez ručního duplikování shape v Zod nebo jiném schema lib. | Hotovo | Střední | před 4 h |