# Stav projektu – kontrolní seznam Aktualizováno: 2025-11-10 Legenda: - [x] hotovo / funguje - [ ] k opravě / k doplnění --- ## Přehled priorit (P1 = kritické) - [x] P1: Komentáře - [x] Backend panic (regex v spam filtru) – odstraněny backreference v Go regex, nahrazeno kontrolou opakování - [x] Komentáře se nezobrazují (admin i frontend) - [x] P1: Scoreboard Remote - [x] 415 (Unsupported Media Type) – sjednocen Content-Type pro timer endpointy - [x] CORS pro `/api/v1/admin/scoreboard/*` - [x] Časovač – ověřit start/stop a další akce - [x] P1: Články - [x] Auto-save vrací 400 (validace payloadu) - [x] Vazba na soutěž (alias) – výběr aliasu nevrací zápasy - [x] P1: Ankety – tvorba/napojení OK (Aktivity i Články) - [x] P1: Frontend chyby „toLowerCase of undefined“ - [x] Admin Hráči - [x] Admin Články --- ## Admin - **Nástěnka** - [x] plně funkční - **Analytika** - [x] plně funkční - **Týmy** - [x] Opravit overrides loga + zkrácené názvy s tečkami - [x] Normalizace názvů (ignorovat tečky/mezery, např. „Frýdlant n. O.“, „Frenštát p. R.“) - [x] Deduplikace výsledků vyhledávání FAČR (opakované položky) - [x] Přidat/ověřit overrides v `team_logo_overrides.json` - [x] 1. BFK Frýdlant n. O. – URL: http://logoapi.sportcreative.eu/logos/35e4f595-f2a7-4c0c-abd7-73926f33d687?format=png - [x] SK Beskyd Frenštát p. R. – URL: http://logoapi.sportcreative.eu/logos/831702b0-cf90-4d94-9878-b1389b6a72b4?format=png - [x] Zajistit propagaci do veřejné části (zápasy, tabule, soupisky) - **Zápasy** - [x] plně funkční - **Hráči** - [x] Odstranit národnost a věk z homepage i z /hraci - [x] Opravit chybu „toLowerCase of undefined“ (bezpečné zacházení s prázdnými poli ve filtrech/tabulce) - **Aliasy soutěží** - [x] Odebrat UI „Přidat nový alias“ (pouze číst z FAČR) - **Tabule (Scoreboard)** - [x] Odstranit `:before` pilulku z bloku týmu (viz `
...`) - [x] Sjednotit vzhled overlay pro sponzory a skóre se scoreboardem - **Scoreboard Remote** - [x] Opravit CORS pro `/api/v1/admin/scoreboard/*` - [x] 415 – sjednotit Content-Type (u timer endpointů povolen POST bez JSON) - [x] Ověřit start/stop timeru a ostatní akce - **Články** - [x] Kategorie (soutěž) – po výběru aliasu nevrací zápasy - [x] Rich text editor – „addRange()“/výběr; stabilizovat editaci - [x] Auto-save 400 (validace payloadu, povolená pole, příznaky publikace) - [x] Detail článku (veřejná část): - [x] Pravý sloupec – nadcházející zápasy dle kategorie - [x] Video – skrýt název (ponechat pouze video) - [x] Galerie – zobrazit - [x] Ankety – zobrazit - [x] Komentáře – zobrazit - **Aktivity** - [x] plně funkční - **Ankety** - [x] Vytváření/napojení ankety (v Aktivitách i v Článcích) - [x] Zajistit plně funkční styly/varianty a zobrazení (admin i public) - **Kategorie** - [x] plně funkční - **Komentáře** - [x] Backend panic v regex (spam filtr) – odstraněny backreference v Go regex, nahrazeno kontrolou opakování - [x] Komentáře se nezobrazují v adminu ani na frontendu - **Videa** - [x] Povolit přepis názvu videa (override) – zobrazit v adminu i na frontendu - [x] Na frontendu potlačit titulek tam, kde je požadováno (např. v detailu článku) - **Galerie** - [x] Přidat tlačítko pro přidání dalšího alba (napojit na fetch endpointy) - **Soubory** - [x] Změnit defaultní kvótu úložiště na 5 GB (z 1 GB) - **Zprávy (Kontakty)** - [x] /kontakt – po odeslání končí na „loading“, přitom zpráva přijde - [x] /sponzori – duplicity zpráv; chybné označení zdroje (kontakt vs sponzoři) - [x] Automatické přeposílání – neprobíhá; opravit trigger/retry - **Newsletter** - [x] Auto-aktivace všech typů newsletteru, pokud existuje alespoň 1 aktivní odběratel - [x] Opravit 500 na `POST /api/v1/admin/newsletter/send-digest` - **Kontakty (admin – Kontakty tab)** - [x] „Přidat kontakt“ – dropdown Kategorie je prázdný; doplnit soutěže a aliasy (stejně jako v Článcích) - **Sponzoři** - [x] plně funkční - **Bannery** - [x] plně funkční - **Oblečení** - [x] plně funkční - **Soutěže (Sweepstakes)** - [x] „Počet výherců“ – zlepšit zadávání (volné psaní, validace), přidat rate limit na max. výherce - [x] „Souhrn výher“ → nahradit „Přidat výhry“ s presety pro rychlé přidání položek - [x] Odebrat „Vstupné (Kč)“ (používáme body) - [x] Nahrání titulního obrázku – 400 při create; opravit upload a validaci - **Odměny & Úspěchy** - [x] Zlepšit UI/UX; na frontendu skrýt pro roli admin (ponechat pro běžné uživatele) - [ ] Ověřit kompletní tok (uplatnění, upload avataru, dostupnost odměn) - **Zkrácené odkazy** - [x] plně funkční - **Prefetch & Cache** - [x] plně funkční - **Nastavení** - [x] Odebrat kartu „Monitoring“ (je automatická, ne-admin) - **Uživatelé** - [x] Přeložit celé UI do češtiny (lista, popup vytvoření uživatele atd.) - [x] Role „editor“ = omezený admin bez 403 (tvorba/úprava obsahu, bez plných práv) - **Navigace (Admin)** - [x] Skrytá položka má zůstat viditelná v adminu pro opětovné zobrazení - [x] Přesun mezi kategoriemi (drag & drop) – musí fungovat i napříč kategoriemi - [x] „Upravit“ – správný cíl (neplést podkategorii/page s hlavní kategorií) - **Dokumentace** - [x] plně funkční - **Odhlásit se** - [x] plně funkční --- ## Veřejná část (frontend) - **Homepage / Hráči** - [x] Odebrat národnost a věk z dlaždic hráčů - **Detail článku** - [x] Pravý sloupec: nadcházející zápasy dle kategorie - [x] Video bez titulku (ponechat pouze video prvek) - [x] Galerie, Ankety, Komentáře – zobrazit, když jsou k dispozici - **/hraci (seznam)** - [x] Odebrat národnost ze seznamu --- ## Backend & API - **Komentáře – chyba (fatal)** - [x] Oprava regexu ve spam filtru: `invalid escape sequence: \1` – nahrazeno kontrolou opakování bez backreferencí (Go nepodporuje backreference) - [x] Stabilizovat vytváření komentářů + návrat do adminu/frontendu - **Scoreboard Remote – CORS/415** - [x] Přidat CORS hlavičky pro admin remote endpoints - [x] Ujednotit Content-Type (server akceptuje POST bez JSON pro timer akce) - **Články – 400 Bad Request (auto-save)** - [x] Zkontrolovat požadovaný payload na backendu (políčka `published`, `slug`, `youtube_*`, `attachments` atp.) - [x] Sladit validaci se skutečným JSONem z frontendu - **Newsletter – 500 na send-digest** - [x] Logy, validace šablon a vstupů; graceful error + retry - [x] Auto-aktivace typů při existenci odběratelů - **Kontakty** - [x] Odlišit zdroj (kontakt vs sponzoři) v uložených zprávách - [x] Opravit duplicity a loading stav po submitu - [x] Zajistit automatické přeposílání (resend) dle nastavení - **Soutěže (upload)** - [x] Opravit create 400 (multipart/form-data nebo JSON + upload pipeline) --- ## Zachycené chyby (výňatek) - Backend fatal (POST /api/v1/comments): - `regexp: Compile(([a-zA-Z!?.])\1{4,}): invalid escape sequence: \1` → upravit regex a ošetření - Frontend (Admin Hráči, Admin Články): - `Cannot read properties of undefined (reading 'toLowerCase')` → bezpečné mapování/filtrace - Scoreboard Remote: - CORS blokace + `415 Unsupported Media Type` při `POST /api/v1/admin/scoreboard/timer/start` - Články – editor/autosave: - `addRange(): The given range isn't in document.` (výběr v editoru) - `PUT /api/v1/articles/:id` → 400 (Bad Request) - Newsletter: - `POST /api/v1/admin/newsletter/send-digest` → 500 --- ## Poznámky k implementaci - Úpravy názvů týmů s tečkami: vytvořit normalizační vrstvu (strip teček, diakritika, mezery) pro porovnávání i při zápisu overrides. - UI skrytí prvků (aliasy soutěží, monitoring v Nastavení) řešit podmíněným renderem i na úrovni backend schématu/feature flagu. - Před nasazením spustit integrační testy: komentáře, ankety, články (autosave), scoreboard remote, newsletter digest.