Skip to content

Ical export programu akcí (#352) - #358

Merged
SmallhillCZ merged 2 commits into
masterfrom
claude/ical-backend-endpoint-l19ivm
Aug 18, 2026
Merged

Ical export programu akcí (#352)#358
SmallhillCZ merged 2 commits into
masterfrom
claude/ical-backend-endpoint-l19ivm

Conversation

@SmallhillCZ

@SmallhillCZ SmallhillCZ commented Aug 17, 2026

Copy link
Copy Markdown
Member

Změny

  • Nová adresa odběru: https://interni.bosan.cz/api/public/program/ical — v public modulu, bez přihlášení, text/calendar.
  • Původní adresa staré interní https://interni.bosan.cz/api/program/ical zase funguje a servíruje ten samý feed. Komu odběr kdysi fungoval, tomu se obnoví sám, bez zásahu. V OpenAPI je označená jako deprecated s odkazem na novou.
  • Feed staví ical-generator (nová závislost backendu) v ProgramIcalService.
  • EventsRepository.getPublicProgramIcal() — stejný výběr akcí jako veřejný program (public + zrušené), ale bez stropu 100 řádků, který má JSON endpoint; společný query builder sdílí s getPublicProgram().
  • program:ical je vystavené v _links na kořeni API, takže si ho veřejný web umí najít sám (doprovodné PR na bosan.cz).
  • Přegenerované frontend/src/sdk, poznámka do CLAUDE.md.
  • Bokem, nesouvisí s ical: smazaný mrtvý web-config ve frontendu (webConfigStructure + schémata WebConfig/WebConfigStructure). Nikdo je neimportoval a obojí odkazovalo na neexistující cesty — web-config-structure.ts to maskoval přes @ts-nocheck, takže tsc hlásil jen jednu z těch dvou rozbitých cest. Klidně vyhoďte z tohoto PR, pokud to chcete řešit zvlášť.

Co feed obsahuje: akce jsou celodenní (DTEND je nevýlučné, tedy dateTill + 1 den), popis skládá text akce + Sraz:/Konec: + oddíly + vedoucí, LOCATION je místo, URL vede na přihlášku (má-li ji akce). Zrušené akce zůstávají jako STATUS:CANCELLED s prefixem Zrušeno: , stejně jako je ukazuje web. UID je stabilní (event-<id>@bosan.cz), takže klienti akce aktualizují a nezdvojují. Okno je 30 dní zpět, dopředu bez omezení.

Dvě věci, které stojí za zmínku, protože nejsou samozřejmé:

  • Kalendář záměrně nemá nastavenou timezoneical-generator pak píše DTSTAMP jako floating local time místo UTC, což je proti RFC 5545 (DTSTAMP tam musí být v UTC) a VTimezone generátor s tím nepohne, protože formatDate() se řídí jen tím, jestli je timezone na kalendáři vůbec nastavená. Bez ní je DTSTAMP korektní UTC a celodenní DTSTART/DTEND to nijak neovlivní (luxonové hodnoty si Europe/Prague nesou samy).
  • timeFrom/timeTill jsou volný text ("8:00", "ráno"), takže se z nich časy nikdy neparsují a akce zůstávají celodenní — jako to dělala stará interní.

Testovací scénář

  1. Otevři si https://test.interni.bosan.cz/api/public/program/ical — měl by se stáhnout .ics soubor s nadcházejícími akcemi.
  2. Zkontroluj, že to samé vrátí i stará adresa https://test.interni.bosan.cz/api/program/ical.
  3. Přidej si první adresu jako odběr kalendáře (Google Calendar → Jiné kalendáře → + → Pomocí adresy URL) a zkontroluj, že:
    • akce sedí datem s programem na webu,
    • vícedenní akce končí správný den (ne o den dřív ani později),
    • u akce s přihláškou vede odkaz na přihlášku,
    • zrušená akce má v názvu Zrušeno: .
  4. Projdi si interní sekci (hlavně nastavení a administraci), že se po smazání web-config nic nerozbilo.

Po otestování vždy napiš feedback, buď Approve review, nebo Request changes. Návod zde: Jak na testování

🤖 Generated with Claude Code

https://claude.ai/code/session_01J3H3cr1ZGK3boxU31MM2KJ

Nová interní servíruje odběr kalendáře na GET /api/public/program/ical
(ProgramIcalService, ical-generator). Původní adresa staré interní
/api/program/ical zůstává funkční, aby fungovaly už nastavené odběry
v kalendářových aplikacích — v OpenAPI je označená jako deprecated.

Akce jsou celodenní (DTEND je nevýlučné, tedy dateTill + 1 den),
kalendář záměrně nemá timezone (ical-generator by pak psal DTSTAMP
jako floating local time místo UTC). Zrušené akce zůstávají ve feedu
jako STATUS:CANCELLED s prefixem "Zrušeno: ". UID je stabilní
(event-<id>@bosan.cz), okno je 30 dní zpět a dopředu bez omezení.

Closes #352
`webConfigStructure` a schémata `WebConfig`/`WebConfigStructure` nikdo
neimportuje — zbytek po odstraněném nastavení webu. Oba soubory navíc
odkazovaly na neexistující cesty (`src/app/schema/…`, `Codelist`
z `codelist-editor`, který v repu není); `web-config-structure.ts` to
maskoval přes `@ts-nocheck`, takže typecheck hlásil jen jednu z chyb.
@SmallhillCZ
SmallhillCZ marked this pull request as ready for review August 18, 2026 08:37
@SmallhillCZ
SmallhillCZ merged commit 04e8292 into master Aug 18, 2026
4 checks passed
@SmallhillCZ
SmallhillCZ deleted the claude/ical-backend-endpoint-l19ivm branch August 18, 2026 08:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant