Przejdź do głównej zawartości

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.

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ć.

GET /api/workspaces/{workspaceId}/calendar-feed?view={view}

Zwraca { "active": true, "createdAt": "…" } — nigdy samego tokenu.

DELETE /api/workspaces/{workspaceId}/calendar-feed?view={view}

Zwraca 204; idempotentne.

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.

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.