diff --git a/README.md b/README.md index 16e2820..41130c0 100644 --- a/README.md +++ b/README.md @@ -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 y vista básica de tareas; la interacción principal sigue siendo WhatsApp. +- 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. - Está optimizado para un despliegue por comunidad/instancia (no multi-tenant masivo). ## Cómo funciona (alto nivel) @@ -95,7 +95,7 @@ Consulta: - Nombre provisional: “Taskbot”. - Licencia por definir (software libre; se evaluará GPLv3/AGPL/MIT/Apache-2.0). - Progreso 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. -- Primer MVP de lectura: endpoint /api/me/tasks y listado básico en /app. +- Lectura (MVP) en curso: endpoints GET /api/me/tasks (orden por fecha de vencimiento), /api/me/groups (con contadores) y /api/groups/:id/tasks; UI de Grupos en /app/groups. - Roadmap y contribuciones: pendientes de publicación. ## Enlaces diff --git a/docs/operations.md b/docs/operations.md index 17cee69..4913279 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -33,6 +33,13 @@ Endpoints operativos - 404 si métricas deshabilitadas; 405 si método no permitido. - GET /health - 200 siempre (proxy interno), útil para healthcheck del contenedor. +- APIs web (requieren sesión) + - GET /api/me/tasks?status=open&search=... + - Orden por fecha de vencimiento ascendente (NULL al final). Aplica gating por AllowedGroups + membresía activa (group_members). Soporta búsqueda simple por descripción. + - GET /api/me/groups + - 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), con opción de priorizar tareas sin responsable. Arranque y servicios - src/server.ts::start() (bot) diff --git a/docs/plan-interfaz-web.md b/docs/plan-interfaz-web.md index 9155209..c57a74d 100644 --- a/docs/plan-interfaz-web.md +++ b/docs/plan-interfaz-web.md @@ -7,7 +7,7 @@ Este documento define el plan para añadir una interfaz web al sistema, mantenie - Arquitectura: dos procesos (apps/bot y apps/web) ejecutándose en la misma app de CapRover, con un proxy interno en Bun (puerto 3000) que enruta /webhook y /metrics al bot (3007) y el resto a la web (3008). SvelteKit para la web (SSR, rutas de API, cookies). - Acceso: enlace mágico por DM con token de 10 minutos, de un solo uso. Sin “recordarme”. - Sesión: cookie de sesión (HttpOnly, SameSite=Lax, Secure en prod) + expiración por inactividad de servidor de 2 horas. -- Orden por defecto: tareas por creación descendente (más recientes primero). +- Orden por defecto: tareas por fecha de vencimiento ascendente (NULL al final). - ICS: - Horizonte temporal: 12 meses. - Excluir tareas sin fecha. @@ -18,7 +18,7 @@ Este documento define el plan para añadir una interfaz web al sistema, mantenie ## 2) Alcance funcional (MVP) -- Mis tareas: lista (orden creación desc), filtros (abiertas, vencen pronto), búsqueda por texto simple. +- Mis tareas: lista (orden por fecha de vencimiento asc), filtros (abiertas, vencen pronto), búsqueda por texto simple. - Tareas de mis grupos: solo grupos permitidos y en los que el usuario está activo; sección destacada de “sin responsable”. - Preferencias de recordatorios: ver y modificar frecuencia (daily/weekly/weekdays/off) y hora. Visualización de próximo recordatorio según TZ. - Autenticación: comando /t web que devuelve URL con token. Canje en /login y cookie de sesión. @@ -187,10 +187,10 @@ Etapa 1 — Autenticación - Web: endpoint /login (GET intermedio + POST canje), cookie de sesión, redirect limpio; hooks de sesión con idle timeout 2h; gate de JS; CSRF checkOrigin desactivado por proxy interno. — HECHO - Páginas de error/expiración. -Etapa 2 — Lectura de datos (MVP) — EN PROGRESO (API /api/me/tasks y UI básica en /app listas) +Etapa 2 — Lectura de datos (MVP) — EN PROGRESO (implementados: GET /api/me/groups con contadores, GET /api/groups/:id/tasks, GET /api/me/preferences; /api/me/tasks ajustado con gating y orden por due_date). - APIs: /api/me/tasks, /api/me/groups, /api/groups/:id/tasks, /api/me/preferences (GET). - UI: “Mis tareas” y “Grupos” (solo lectura). -- Orden de creación desc, filtros básicos, búsqueda. +- Orden por fecha de vencimiento asc (NULL al final), filtros básicos, búsqueda. Etapa 3 — Preferencias - APIs: GET/POST /api/me/preferences.