vyvoj-dash

Tasky

42 tasků

Kanban board tasků — filtr dle priority, labelu nebo runu.

ID Název Status Priorita Vytvořeno
51 Našeptávač v hero search baru
Hero search bar v patičce ukazoval mock 10 fake položek. Teď se po 250ms debounce zeptá API a klik na výsledek vede přímo na detail spotu. Generation-token guard zahodí pomalý response, kdyby user mezitím doťukal další písmeno.
Hotovo Střední 7. 5. 2026
52 Vyhledávání na /mapa
Vyhledávací input nahoře na /mapa byl decorative — neposílal nic. Obalený do <form action=/mapa>, Enter teď refreshuje stránku s ?q=… a backend filtruje. Stávající filtry (amenities, terrain, rating) přežijí přes hidden inputy.
Hotovo Střední 7. 5. 2026
50 Hledání spotů přes API ?q=...
Backend listSpots neuměl text search — UI parametr ?q=... se ignoroval. Teď filtruje přes LIKE na názvu, regionu a popisu. SQLite default ASCII case-insensitive, diakritika přesný match (pro v1 dataset stovek spotů OK).
Hotovo Střední 7. 5. 2026
47 Záložka Oblíbené v účtu funguje
Záložka Oblíbené v profilu místo placeholderu načítá první stránku skutečně uložených spotů (přes /api/favorites) a zobrazí je stejnými kartami. Prázdný stav má vlastní hlášku a tlačítko na mapu.
Hotovo Střední 7. 5. 2026
48 Počítadlo oblíbených v profilu
Číslo u záložky Oblíbené bylo hardcoded 0. /api/users/me/stats teď vrací reálný počet z DB a profil ho zobrazí v záložce.
Hotovo Střední 7. 5. 2026
49 Smoke test produkce
Smoke test produkce zbývá ručně po deploy: kliknout ♡ na kartě, ověřit že se ve /ucet objeví, refresh drží stav, druhý klik odebere.
Hotovo Střední 7. 5. 2026
45 Tlačítko ♡ Uložit s instant odezvou
♡ tlačítko na kartě a detailu spotu chybělo — bylo jen statický placeholder. Přidaný islet s animací prázdné→plné srdce, který reaguje hned (optimistic), a v případě chyby se vrátí do původního stavu. Pro nepřihlášené přesměruje na /sign-in.
Hotovo Střední 7. 5. 2026
46 ♡ button na kartách + detailu spotu
Karty spotů (homepage Top spoty + /ucet) i stránka detailu teď mají funkční ♡. Backend vrací stav přes ?include=isFavorited, takže po refreshi srdce drží uloženou hodnotu.
Hotovo Střední 7. 5. 2026
40 Tabulka oblíbených spotů v databázi
Vytvořena migration 0007 + Drizzle schema pro user_favorite tabulku — relation many-to-many (user, spot) s unique(userId, spotId), cascade delete + 2 indexy pro listFavorites a include batch lookup. Před prvním deployem fronend musí proběhnout 'wrangler d1 migrations apply hammocknook-prod --remote'.
Hotovo Střední 7. 5. 2026
41 Datové modely pro oblíbené (Effect Schema)
Přidán Effect Schema FavoriteResponse (id, userId, spotId, createdAt) v libs/api-models/src/favorite.ts + isFavorited optional Boolean field na SpotResponse. Reuse SpotListResponse pro GET /api/favorites — žádný extra DTO.
Hotovo Střední 7. 5. 2026
42 API rozhraní pro oblíbené (3 endpointy)
FavoritesApi HttpApiGroup s 3 endpointy v libs/api-models/src/api/favorites.ts: POST/DELETE /api/spots/:spotId/favorite + GET /api/favorites (auth, vrací plný SpotListResponse). Wired do HammocknookApi.
Hotovo Střední 7. 5. 2026
43 Implementace handlerů pro oblíbené
Handlery v api/src/api-groups/favorites.ts: idempotent POST přes onConflictDoNothing+SELECT fallback, idempotent DELETE bez existence check, listFavorites s INNER JOIN spot + cursor pagination + privacy filter (ADMIN vidí vše, jinak isPrivate=false OR createdBy=me).
Hotovo Střední 7. 5. 2026
44 Příznak ?include=isFavorited v list + detail spotu
?include=isFavorited query flag: listSpots batch lookup přes inArray() na page IDs (1 query pro celou stránku), getSpot single SELECT row check. Pro neauth user se flag tiše ignoruje, isFavorited se neobjeví v response.
Hotovo Střední 7. 5. 2026
28 Wire HttpApiGroups do http-app + drop Hono mounty Hotovo Střední 6. 5. 2026
29 Smoke + typecheck Hotovo Střední 6. 5. 2026
25 Migrace recenzí na Effect HTTP API Hotovo Střední 6. 5. 2026
26 Migrace endpointu uživatelských statistik na Effect HTTP API Hotovo Střední 6. 5. 2026
27 Migrace administrátorských akcí na Effect HTTP API Hotovo Střední 6. 5. 2026
23 Wire HttpApiGroups do http-app + drop Hono mounty Hotovo Střední 6. 5. 2026
24 Smoke + typecheck Hotovo Střední 6. 5. 2026
20 Migrace Spot endpointů na Effect HTTP API Hotovo Střední 6. 5. 2026
21 Migrace Photo endpointů na Effect HTTP API Hotovo Střední 6. 5. 2026
22 Migrace Vote endpointu na Effect HTTP API Hotovo Střední 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026
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í 6. 5. 2026