API: Kanały kalendarza
Każdy członek może zamienić WIDOK zadań — listę albo jeden z inteligentnych filtrów — w kanał iCalendar (RFC 5545) z jego oczekujących zadań z terminem, renderowanych jako wydarzenia całodniowe. Kanały zawierają wyłącznie tytuły i daty — nigdy opisów. Kanały są przypisane do użytkownika ORAZ do widoku.
Widok adresuje się następująco:
| Widok | Wartość view |
|---|---|
| lista | list:{listId} |
| wszystkie zadania | all |
| przypisane do mnie | assignedToMe |
| nieprzypisane | unassigned |
| po terminie | pastDue |
| nadchodzące (najbliższe 7 dni) | dueSoon |
assignedToMe zawsze oznacza WŁAŚCICIELA kanału; okna pastDue/dueSoon
są wyliczane w chwili pobrania względem dnia kalendarzowego UTC.
Wygenerowanie (lub rotacja) tokenu kanału
Dział zatytułowany „Wygenerowanie (lub rotacja) tokenu kanału”POST /api/workspaces/{workspaceId}/calendar-feed{ "view": "assignedToMe", "name": "Assigned to me" }name to wyświetlana nazwa widoku w języku wywołującego — zapisywana jako
migawka dla kanałów filtrów (kanały list zawsze renderują aktualną nazwę
listy). Zwraca 201:
{ "token": "tdmcal_…", "path": "/api/calendar/tdmcal_…" }Token (256-bitowy, losowy, prefiks tdmcal_) jest pokazywany dokładnie
raz — serwer przechowuje tylko jego hash. Ponowne wygenerowanie dla tego
samego widoku oznacza ROTACJĘ: poprzedni token natychmiast przestaje
działać.
Status kanału
Dział zatytułowany „Status kanału”GET /api/workspaces/{workspaceId}/calendar-feed?view={view}Zwraca { "active": true, "createdAt": "…" } — nigdy samego tokenu.
Unieważnianie
Dział zatytułowany „Unieważnianie”DELETE /api/workspaces/{workspaceId}/calendar-feed?view={view}Zwraca 204; idempotentne.
Publiczny kanał
Dział zatytułowany „Publiczny kanał”GET /api/calendar/{token}Bez uwierzytelniania — token jest poświadczeniem. Serwuje text/calendar.
Autoryzacja jest sprawdzana ponownie przy każdym pobraniu: jeśli członek
opuści obszar roboczy albo lista lub konto zostaną usunięte, kanał
odpowiada 404 — tak samo jak w przypadku nieznanego lub zrotowanego
tokenu.
Jednorazowe pobranie
Dział zatytułowany „Jednorazowe pobranie”GET /api/workspaces/{workspaceId}/calendar.ics?view={view}&name={name}Uwierzytelniane sesją; zwraca ten sam dokument iCalendar jako załącznik
(name opisuje widoki filtrów). To migawka — w przeciwieństwie do kanału
nigdy się nie aktualizuje.
