docs: actualizar doc de preferencias y API /api/me/preferences

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
webui
borja 2 weeks ago
parent 24b29aac18
commit f838742db0

@ -27,7 +27,7 @@ Taskbot ayuda a coordinar grupos en WhatsApp: crea y asigna tareas, recuerda pen
- No es un framework general de bots ni un CRM.
- No conecta directamente con WhatsApp: requiere Evolution API.
- No gestiona flujos conversacionales complejos ni multimedia avanzada.
- Panel web en progreso: login operativo, vista básica de tareas (por fecha de vencimiento) y de grupos (contadores "abiertas" y "sin responsable"); la interacción principal sigue siendo WhatsApp.
- Panel web: login operativo, vista básica de tareas (por fecha de vencimiento), vista de grupos (contadores "abiertas" y "sin responsable") y página de preferencias de recordatorios; la interacción principal sigue siendo WhatsApp.
- Está optimizado para un despliegue por comunidad/instancia (no multi-tenant masivo).
## Cómo funciona (alto nivel)
@ -93,7 +93,7 @@ Consulta:
## Pruebas (bun:test)
- Suite web implementada con build programático: los tests construyen apps/web (adapter-node) una única vez, arrancan el servidor en un puerto efímero y hacen peticiones HTTP reales.
- Sin dependencias externas: bun:test, bun:sqlite y helpers propios.
- Cobertura actual: endpoints /api/me/tasks (gating, orden, búsqueda con ESCAPE, soonDays y paginación), /api/me/preferences (valores por defecto) y helpers de servidor para build/arranque.
- Cobertura actual: endpoints /api/me/tasks (gating, orden, búsqueda con ESCAPE, soonDays y paginación), /api/me/preferences (GET y POST) y página /app/preferences; además de helpers de servidor para build/arranque.
- Ejecución: bun test tests/web
## Estado y licencia
@ -102,6 +102,7 @@ Consulta:
- Licencia por definir (software libre; se evaluará GPLv3/AGPL/MIT/Apache-2.0).
- Etapa 1 (autenticación web): completada. /login (GET intermedio + POST), sesión con idle 2h, logout y ruta /app protegida; desplegado con proxy interno en Bun.
- Etapa 2 (lectura de datos - MVP): completada. GET /api/me/tasks (orden por due_date asc con NULL al final, búsqueda con ESCAPE, filtros soonDays/dueBefore, paginación page/limit), GET /api/me/groups (contadores open/unassigned) y GET /api/groups/:id/tasks (unassignedFirst, onlyUnassigned, limit). UI: /app (Mis tareas, filtros/búsqueda/paginación) y /app/groups (bloque “sin responsable” con prefetch).
- Etapa 3 (preferencias): completada. GET/POST /api/me/preferences y página /app/preferences con cálculo de “próximo recordatorio” coherente con la TZ y semántica del bot.
- Roadmap y contribuciones: pendientes de publicación.
## Enlaces

@ -40,6 +40,10 @@ Endpoints operativos
- Devuelve solo grupos permitidos donde el usuario está activo. Incluye counts.open y counts.unassigned por grupo.
- GET /api/groups/:id/tasks?unassignedFirst=true
- Requiere que el usuario sea miembro activo del grupo y que el grupo esté permitido. Orden por due_date (NULL al final); admite parámetros unassignedFirst, onlyUnassigned y limit (clamp a 100).
- GET /api/me/preferences
- Devuelve las preferencias del usuario para recordatorios como { freq, time }. Si no hay registro previo, responde { freq: 'off', time: '08:30' }.
- POST /api/me/preferences
- Actualiza preferencias. Valida freq ∈ {off,daily,weekly,weekdays} y time en formato HH:MM (24h); normaliza hora (p. ej., 7:5 → 07:05). Upsert con updated_at; si freq='off' y no se envía time, conserva la última hora guardada (o '08:30' por defecto).
Arranque y servicios
- src/server.ts::start() (bot)

@ -192,9 +192,9 @@ Etapa 2 — Lectura de datos (MVP) — COMPLETADA: GET /api/me/tasks (orden por
- UI: “Mis tareas” y “Grupos” (solo lectura).
- Orden por fecha de vencimiento asc (NULL al final), filtros básicos, búsqueda.
Etapa 3 — Preferencias
- APIs: GET/POST /api/me/preferences.
- UI: edición de frecuencia/hora y vista del próximo recordatorio.
Etapa 3 — Preferencias — COMPLETADA
- APIs: GET/POST /api/me/preferences (validación y upsert; normalización HH:MM; conservación de hora al desactivar).
- UI: /app/preferences con formulario (frecuencia y hora) y “próximo recordatorio” calculado en servidor, alineado con la TZ y la semántica del bot (weekly = lunes, weekdays = LV).
Etapa 4 — ICS
- Migraciones: calendar_tokens.

Loading…
Cancel
Save