Saltar al contenido principal

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​

RolProyectosTareasMiembros
ADMINCRUD allCRUD allGestionar todos
MANAGERCRUD ownsCRUD proyectosGestionar proyectos
MEMBERRead assignedCRUD 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​

FuncionalidadPuntos
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​

TareaHoras
Configuración del proyecto y BD2
Entidades y repositorios5
Servicios de negocio8
Controladores REST5
Seguridad y permisos5
Pruebas6
Documentación2
Bonus4-8
Total33-41

Volver al Proyecto Final