Productivity API: Tasks & Pomodoro

Tasks API

Controlador: app/Http/Controllers/Api/TaskController.php (188 líneas)

Usa apiResource que genera CRUD completo automáticamente. Todos los endpoints son protegidos (auth:sanctum).


GET /api/tasks (protegida)

Listar tareas del usuario autenticado (paginado 20).

Query params: | Param | Tipo | Descripción | |—|—|—| | status | string | Filtrar por: pending, in_progress, completed, cancelled | | priority | string | Filtrar por: low, medium, high | | overdue | boolean | Si true, solo tareas vencidas (due_date < now AND status in pending/in_progress) | | sort_by | string | Ordenar por: created_at (default), priority, due_date | | sort_order | string | desc (default) o asc |

Ejemplos:

GET /api/tasks?status=pending&priority=high
GET /api/tasks?overdue=true
GET /api/tasks?sort_by=priority&sort_order=asc

Response:

{
  "success": true,
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 1,
        "uuid_cliente": "550e8400-e29b-41d4-a716-446655440000",
        "title": "Estudiar para examen",
        "description": "Capítulos 3-5",
        "status": "pending",
        "priority": "high",
        "due_date": "2025-06-25",
        "estimated_pomodoros": 4,
        "completed_at": null,
        "pomodoro_sessions": [ ... ]
      }
    ]
  }
}

Eager loads: pomodoroSessions (para mostrar progreso de pomodoros).


POST /api/tasks (protegida)

Crear una nueva tarea.

Request:

{
  "title": "Estudiar para examen",
  "description": "Capítulos 3-5",
  "priority": "high",
  "due_date": "2025-06-25",
  "estimated_pomodoros": 4,
  "uuid_cliente": "550e8400-e29b-41d4-a716-446655440000"
}

Validación:

Response (201):