Ir al contenido

API: Feeds de calendario

Cada miembro puede convertir una VISTA de tareas — una lista, o uno de los filtros inteligentes — en un feed iCalendar (RFC 5545) de sus tareas pendientes con fecha de vencimiento, representadas como eventos de día completo. Los feeds contienen solo títulos y fechas — nunca descripciones. Los feeds son por usuario Y por vista.

Una vista se direcciona así:

Vista Valor de view
una lista list:{listId}
todas las tareas all
asignadas a mí assignedToMe
sin asignar unassigned
vencidas pastDue
vencen pronto (próximos 7 días) dueSoon

assignedToMe siempre se refiere al PROPIETARIO del feed; las ventanas de pastDue/dueSoon se evalúan en el momento de la consulta contra el día de calendario en UTC.

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

name es el nombre visible de la vista en el idioma del solicitante — se guarda como instantánea para los feeds de filtro (los feeds de lista siempre muestran el nombre actual de la lista). Devuelve 201:

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

El token (256 bits aleatorios, prefijo tdmcal_) se muestra exactamente una vez — el servidor almacena solo su hash. Generarlo de nuevo para la misma vista lo ROTA: el token anterior deja de funcionar de inmediato.

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

Devuelve { "active": true, "createdAt": "…" } — nunca el token en sí.

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

Devuelve 204; idempotente.

GET /api/calendar/{token}

Sin autenticación — el token es la credencial. Sirve text/calendar. La autorización se vuelve a comprobar en cada consulta: si el miembro abandona el espacio de trabajo, o se elimina la lista o la cuenta, el feed responde 404, igual que un token desconocido o rotado.

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

Autenticada por sesión; devuelve el mismo documento iCalendar como adjunto (name etiqueta las vistas de filtro). Es una instantánea — a diferencia del feed, nunca se actualiza.