Descripción
Cloudflare Pages Function que expone el endpoint GET /api/tasks/comments. Devuelve un listado paginado de todos los comentarios de todas las tareas del workspace, con soporte de filtros combinables. Introducido en PR#57 (s77) para alimentar la vista “Gestor transversal de comentarios” en /tasks?view=comments.
Ruta y método
GET /api/tasks/comments
Implementado en functions/api/tasks/comments.ts como onRequestGet: PagesFunction<Env>.
Filtros soportados (query params — todos opcionales)
| Parámetro | Tipo | Descripción |
|---|---|---|
author | string | Filtra por autor exacto (Edu, Dani, Txell). |
target_user | string | Match en target_user_ids (JSON array). Usa LIKE "%"<name>"%" para evitar falsos positivos. |
task_id | int | Filtra por tarea exacta. |
task_title | string | LIKE %…% en el título de la tarea relacionada. |
q | string | LIKE %…% en el body del comentario. |
start_date | YYYY-MM-DD | Rango desde (inclusive). |
end_date | YYYY-MM-DD | Rango hasta (incluye todo el día con `<= ’…’ |
limit | int | Paginación, default 50, máx 200. |
offset | int | Offset, default 0. |
Respuesta
{
"results": [
{
"id": 42,
"task_id": 7,
"author": "Edu",
"body": "...",
"target_user_ids": "[\"Dani\"]",
"created_at": "2026-05-19 10:23:00",
"task_title": "Revisar factura",
"task_status": "in_progress",
"task_assignee": "Dani"
}
],
"total": 127
}
El shape { results, total } replica el patrón de /api/activity para reutilizar lógica de paginación en el frontend.
Consulta SQL
JOIN entre task_comments (alias c) y tasks (alias t):
SELECT c.id, c.task_id, c.author, c.body, c.target_user_ids, c.created_at,
t.title AS task_title, t.status AS task_status, t.assignee AS task_assignee
FROM task_comments c
LEFT JOIN tasks t ON t.id = c.task_id
[WHERE ...]
ORDER BY c.created_at DESC
LIMIT ? OFFSET ?
Se ejecutan dos queries: una para los resultados y otra SELECT COUNT(*) para el total (mismo WHERE). Ambas comparten el mismo array de params (bind posicional de D1).
Tablas D1 involucradas
task_comments— tabla principal (columnasid,task_id,author,body,target_user_ids,created_at).tasks— JOIN para enriquecer con título, estado y asignado.
Notas de implementación
target_user_idsse almacena como JSON TEXT. El filtro usaLIKE "%\"<nombre>\"%"con comillas dobles escapadas para evitar falsos positivos (p. ej. “Ed” dentro de “Edu”).- El campo
endDateusa la expresiónc.created_at <= ? || ' 23:59:59'para incluir registros de todo el día final sin depender de funciones de fecha de SQLite. - Sin autenticación propia (hereda la sesión CF Pages de la aplicación).
Véase también
- [[entity—tasks—endpoint—api-tasks-index]]
- [[feature—tasks—gestor-comentarios-transversal]]