Proyecto B: Sistema de Gestión de Tareas
Descripción
Desarrollar una API RESTful para un sistema de gestión de proyectos y tareas, permitiendo a los equipos colaborar, seguir el progreso y gestionar su tiempo.
Funcionalidades Requeridas
1. Gestión de Usuarios
POST /api/auth/register - Registro
POST /api/auth/login - Inicio de sesión (devuelve JWT)
GET /api/users/me - Perfil de usuario
PUT /api/users/me - Modificar perfil
GET /api/users - Lista de usuarios (ADMIN/MANAGER)
Entidad User:
- id, email, password, firstName, lastName
- role (ADMIN, MANAGER, MEMBER)
- department, createdAt
2. Gestión de Proyectos
GET /api/projects - Mis proyectos
POST /api/projects - Crear proyecto
GET /api/projects/{id} - Detalle del proyecto
PUT /api/projects/{id} - Modificar proyecto
DELETE /api/projects/{id} - Eliminar proyecto
POST /api/projects/{id}/members - Añadir miembro
DELETE /api/projects/{id}/members/{userId} - Quitar miembro
Entidad Project:
- id, name, description
- owner (User)
- members (ManyToMany User)
- status (PLANNING, ACTIVE, ON_HOLD, COMPLETED)
- startDate, endDate, createdAt
3. Gestión de Tareas
GET /api/projects/{id}/tasks - Tareas del proyecto
POST /api/projects/{id}/tasks - Crear tarea
GET /api/tasks/{id} - Detalle de la tarea
PUT /api/tasks/{id} - Modificar tarea
DELETE /api/tasks/{id} - Eliminar tarea
PUT /api/tasks/{id}/status - Cambiar estado
PUT /api/tasks/{id}/assign - Asignar tarea
GET /api/tasks/my-tasks - Mis tareas
Entidad Task:
- id, title, description
- project (ManyToOne)
- assignee (User)
- priority (LOW, MEDIUM, HIGH, URGENT)
- status (TODO, IN_PROGRESS, IN_REVIEW, DONE)
- dueDate, estimatedHours, createdAt
4. Comentarios y Actividad
GET /api/tasks/{id}/comments - Comentarios
POST /api/tasks/{id}/comments - Añadir comentario
DELETE /api/comments/{id} - Eliminar comentario
GET /api/tasks/{id}/activity - Historial de actividad
Entidad Comment:
- id, task, author, content, createdAt
Entidad Activity:
- id, task, user, action, details, createdAt
5. Seguimiento de Tiempo
POST /api/tasks/{id}/time-entries - Registrar tiempo
GET /api/tasks/{id}/time-entries - Tiempo en la tarea
GET /api/time-entries/my-entries - Mi tiempo
GET /api/projects/{id}/time-report - Reporte de tiempo del proyecto
Entidad TimeEntry:
- id, task, user, hours, description, date
Esquema de Base de Datos
users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
├── department
└── created_at
projects
├── id (PK)
├── name
├── description
├── owner_id (FK)
├── status
├── start_date
├── end_date
└── created_at
project_members
├── project_id (FK)
└── user_id (FK)
tasks
├── id (PK)
├── title
├── description
├── project_id (FK)
├── assignee_id (FK)
├── priority
├── status
├── due_date
├── estimated_hours
└── created_at
comments
├── id (PK)
├── task_id (FK)
├── author_id (FK)
├── content
└── created_at
activities
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── action
├── details
└── created_at
time_entries
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── hours
├── description
└── date
Reglas de Negocio
Proyectos
- Solo el owner o ADMIN puede eliminar un proyecto
- MANAGER puede crear proyectos
- Un miembro puede ver los proyectos a los que pertenece
Tareas
- Solo los miembros del proyecto pueden ver las tareas
- Asignar una tarea crea una actividad
- El cambio de estado crea una actividad
Transiciones de Estado de Tarea
TODO -> IN_PROGRESS -> IN_REVIEW -> DONE
<- (puede volver atrás)
Permisos
| Rol | Proyectos | Tareas | Miembros |
|---|---|---|---|
| ADMIN | CRUD all | CRUD all | Gestionar todos |
| MANAGER | CRUD owns | CRUD proyectos | Gestionar proyectos |
| MEMBER | Read assigned | CRUD assigned | - |
Endpoints Detallados
Proyectos
POST /api/projects
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Website Redesign",
"description": "Complete redesign of company website",
"startDate": "2024-02-01",
"endDate": "2024-04-30"
}
Response 201:
{
"id": 1,
"name": "Website Redesign",
"description": "Complete redesign of company website",
"owner": { "id": 1, "firstName": "John", "lastName": "Doe" },
"status": "PLANNING",
"startDate": "2024-02-01",
"endDate": "2024-04-30",
"members": [],
"createdAt": "2024-01-15T10:30:00"
}
Tareas
POST /api/projects/1/tasks
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"priority": "HIGH",
"dueDate": "2024-02-15",
"estimatedHours": 16,
"assigneeId": 2
}
Response 201:
{
"id": 1,
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"project": { "id": 1, "name": "Website Redesign" },
"assignee": { "id": 2, "firstName": "Jane", "lastName": "Smith" },
"priority": "HIGH",
"status": "TODO",
"dueDate": "2024-02-15",
"estimatedHours": 16
}
Seguimiento de Tiempo
POST /api/tasks/1/time-entries
Authorization: Bearer <token>
Content-Type: application/json
{
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}
Response 201:
{
"id": 1,
"task": { "id": 1, "title": "Design Homepage" },
"user": { "id": 2, "firstName": "Jane" },
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}
Reporte de Tiempo
GET /api/projects/1/time-report
Authorization: Bearer <token>
Response 200:
{
"project": { "id": 1, "name": "Website Redesign" },
"totalHours": 45.5,
"estimatedHours": 120,
"byUser": [
{ "user": "Jane Smith", "hours": 28.5 },
{ "user": "Bob Wilson", "hours": 17.0 }
],
"byTask": [
{ "task": "Design Homepage", "logged": 16, "estimated": 16 },
{ "task": "Implement Header", "logged": 12.5, "estimated": 24 }
]
}
Pruebas Requeridas
Pruebas Unitarias
- ProjectService: CRUD, gestión de miembros
- TaskService: CRUD, transiciones de estado
- TimeEntryService: registro, cálculos
Pruebas de Integración
- ProjectController: todos los endpoints
- TaskController: flujo de trabajo de tareas
- Seguridad: acceso basado en roles
Puntos Extra
| Funcionalidad | Puntos |
|---|---|
| Notificaciones WebSocket | +5 |
| Endpoint de datos para tablero Kanban | +3 |
| Notificaciones por correo electrónico (simulación) | +3 |
| Tareas recurrentes | +3 |
| Exportar reporte PDF | +3 |
| Dashboard de estadísticas | +5 |
Estimación de Tiempo
| Tarea | Horas |
|---|---|
| Configuración del proyecto y BD | 2 |
| Entidades y repositorios | 5 |
| Servicios de negocio | 8 |
| Controladores REST | 5 |
| Seguridad y permisos | 5 |
| Pruebas | 6 |
| Documentación | 2 |
| Bonus | 4-8 |
| Total | 33-41 |