Verejné Changelog API — Swagger doc, wildcard CORS a footer dropdown
· Infraštruktúra
Changelog (toto, čo práve čítaš) je teraz dostupný cez stabilný, verejne dokumentovaný HTTP API, aby sa dal zobrazovať aj na externých weboch mimo SaaS dashboardu. (1) Swagger UI na /api/public/docs — samostatný OpenAPI dokument oddelený od admin (/api/docs) a storefront (/api/storefront/docs) docs. Obsahuje plnú schému request DTOs (typy, enumy, bounds) aj response DTOs (PaginatedChangelogResponseDto, ChangelogItemResponseDto) s príkladmi, popisom polí a closed-enum hodnotami. Description vysvetľuje autentikáciu (žiadna), CORS politiku, rate limity a caching pravidlá. (2) Wildcard CORS pre /changelogs/* — Access-Control-Allow-Origin: * (bez Allow-Credentials, aby browser akceptoval podľa špecifikácie) na rozdiel od zvyšku API, ktorý používa whitelist + cookies. Mountnuté ako per-route middleware POST app.enableCors() aby NestJS-ov global CORS nemohol prekryť hlavičky. Preflight (OPTIONS) vracia 204 s 24-hod cache. (3) Per-IP rate limit — /changelogs 60 req/min/IP (paginated, ťažší JOIN+count), /changelogs/latest 120 req/min/IP (widget poll path). Predtým bol len globálny throttle 500 000/60 s — useless ako DoS guard pri verejnom embed-e. (4) CDN-friendly Cache-Control — public, max-age=60, s-maxage=300, stale-while-revalidate=600. Browser cache 1 min, shared/CDN 5 min, SWR window 10 min. Plus Vary: Origin aby CDN bezpečne distribuoval wildcard-CORS response na akýkoľvek origin bez poison-u. (5) Closed-enum DTO validácia — predtým module a lang boli @IsString() (enum advertised len v Swagger doc, nie vo validátore); teraz @IsIn(CHANGELOG_MODULES/LANGS) proti const arrayom. Closuje CDN cache-key explosion vektor + full-table-scan na cache miss. (6) Footer dropdown v admin UI — pôvodný „API Docs" link (jednoduchý anchor) je teraz DropdownMenu so 3 položkami: Admin API (skrytý v produkčnom buildu, lebo /api/docs je tam disabled), Storefront API, Changelog API. Bilingválne i18n keys. (7) Test coverage — 18 nových API specs (PublicModule wiring, ChangelogsController throttle contract, DTO closed-enum validácia 14 cases) + 3 web specs (dropdown items, href/target/rel, prod build NODE_ENV gating) + e2e suite pre Swagger UI doc + CORS preflight + Cache-Control headers. Zelený CI gate.