Zum Inhalt springen

API: Kalender-Feeds

Jedes Mitglied kann eine Aufgaben-ANSICHT — eine Liste oder einen der Schnellfilter — in einen iCalendar-Feed (RFC 5545) ihrer offenen Aufgaben mit Fälligkeitsdatum verwandeln, dargestellt als ganztägige Termine. Feeds enthalten nur Titel und Termine — nie Beschreibungen. Feeds gelten pro Nutzer UND pro Ansicht.

Eine Ansicht wird so adressiert:

Ansicht view-Wert
eine Liste list:{listId}
alle Aufgaben all
mir zugewiesen assignedToMe
nicht zugewiesen unassigned
überfällig pastDue
bald fällig (nächste 7 Tage) dueSoon

assignedToMe meint immer den BESITZER des Feeds; die Zeitfenster von pastDue/dueSoon werden beim Abruf gegen den UTC-Kalendertag ausgewertet.

POST /api/workspaces/{workspaceId}/calendar-feed
{ "view": "assignedToMe", "name": "Assigned to me" }

name ist der Anzeigename der Ansicht in der Sprache des Aufrufers — für Filter-Feeds wird er als Schnappschuss gespeichert (Listen-Feeds rendern immer den aktuellen Listennamen). Liefert 201:

{ "token": "tdmcal_…", "path": "/api/calendar/tdmcal_…" }

Das Token (256 Bit Zufall, Präfix tdmcal_) wird genau einmal angezeigt — der Server speichert nur seinen Hash. Erneutes Erzeugen für dieselbe Ansicht ROTIERT: das vorherige Token funktioniert sofort nicht mehr.

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

Liefert { "active": true, "createdAt": "…" } — nie das Token selbst.

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

Liefert 204; idempotent.

GET /api/calendar/{token}

Ohne Authentifizierung — das Token ist der Berechtigungsnachweis. Liefert text/calendar. Die Autorisierung wird bei jedem Abruf neu geprüft: verlässt das Mitglied den Arbeitsbereich oder wird die Liste oder das Konto gelöscht, antwortet der Feed mit 404, genau wie bei einem unbekannten oder rotierten Token.

GET /api/workspaces/{workspaceId}/calendar.ics?view={view}&name={name}

Session-authentifiziert; liefert dasselbe iCalendar-Dokument als Anhang (name beschriftet Filter-Ansichten). Ein Schnappschuss — anders als der Feed aktualisiert er sich nie.