Projeto B: Sistema de Gerenciamento de Tarefas
Descrição
Desenvolva uma API RESTful para um sistema de gerenciamento de projetos e tarefas, permitindo que equipes colaborem, acompanhem o progresso e gerenciem seu tempo.
Funcionalidades Requeridas
1. Gerenciamento de Usuários
POST /api/auth/register - Cadastro
POST /api/auth/login - Login (retorna JWT)
GET /api/users/me - Perfil do usuário
PUT /api/users/me - Editar perfil
GET /api/users - Listar usuários (ADMIN/MANAGER)
Entidade User:
- id, email, password, firstName, lastName
- role (ADMIN, MANAGER, MEMBER)
- department, createdAt
2. Gerenciamento de Projetos
GET /api/projects - Meus projetos
POST /api/projects - Criar projeto
GET /api/projects/{id} - Detalhes do projeto
PUT /api/projects/{id} - Editar projeto
DELETE /api/projects/{id} - Excluir projeto
POST /api/projects/{id}/members - Adicionar membro
DELETE /api/projects/{id}/members/{userId} - Remover membro
Entidade Project:
- id, name, description
- owner (User)
- members (ManyToMany User)
- status (PLANNING, ACTIVE, ON_HOLD, COMPLETED)
- startDate, endDate, createdAt
3. Gerenciamento de Tarefas
GET /api/projects/{id}/tasks - Tarefas do projeto
POST /api/projects/{id}/tasks - Criar tarefa
GET /api/tasks/{id} - Detalhes da tarefa
PUT /api/tasks/{id} - Editar tarefa
DELETE /api/tasks/{id} - Excluir tarefa
PUT /api/tasks/{id}/status - Alterar status
PUT /api/tasks/{id}/assign - Atribuir tarefa
GET /api/tasks/my-tasks - Minhas tarefas
Entidade Task:
- id, title, description
- project (ManyToOne)
- assignee (User)
- priority (LOW, MEDIUM, HIGH, URGENT)
- status (TODO, IN_PROGRESS, IN_REVIEW, DONE)
- dueDate, estimatedHours, createdAt
4. Comentários e Atividades
GET /api/tasks/{id}/comments - Comentários
POST /api/tasks/{id}/comments - Adicionar comentário
DELETE /api/comments/{id} - Excluir comentário
GET /api/tasks/{id}/activity - Histórico de atividades
Entidade Comment:
- id, task, author, content, createdAt
Entidade Activity:
- id, task, user, action, details, createdAt
5. Controle de Tempo
POST /api/tasks/{id}/time-entries - Registrar tempo
GET /api/tasks/{id}/time-entries - Tempo na tarefa
GET /api/time-entries/my-entries - Meu tempo
GET /api/projects/{id}/time-report - Relatório de tempo do projeto
Entidade TimeEntry:
- id, task, user, hours, description, date
Esquema do Banco de Dados
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
Regras de Negócio
Projetos
- Somente o owner ou ADMIN pode excluir um projeto
- MANAGER pode criar projetos
- Um membro pode visualizar os projetos dos quais faz parte
Tarefas
- Somente membros do projeto podem visualizar as tarefas
- Atribuir uma tarefa cria uma atividade
- Mudança de status cria uma atividade
Transições de Status da Tarefa
TODO -> IN_PROGRESS -> IN_REVIEW -> DONE
<- (pode voltar para trás)
Permissões
| Role | Projetos | Tarefas | Membros |
|---|---|---|---|
| ADMIN | CRUD todos | CRUD todos | Gerenciar todos |
| MANAGER | CRUD próprios | CRUD projetos | Gerenciar projetos |
| MEMBER | Ler atribuídas | CRUD atribuídas | - |
Endpoints Detalhados
Projetos
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"
}
Tarefas
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
}
Controle de Tempo
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"
}
Relatório de Tempo
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 }
]
}
Testes Requeridos
Testes Unitários
- ProjectService: CRUD, gerenciamento de membros
- TaskService: CRUD, transições de status
- TimeEntryService: registro, cálculos
Testes de Integração
- ProjectController: todos os endpoints
- TaskController: fluxo de tarefas
- Segurança: acesso baseado em roles
Pontos Bônus
| Funcionalidade | Pontos |
|---|---|
| Notificações via WebSocket | +5 |
| Endpoint de dados para Kanban board | +3 |
| Notificações por e-mail (simulação) | +3 |
| Tarefas recorrentes | +3 |
| Exportar relatório em PDF | +3 |
| Dashboard de estatísticas | +5 |
Estimativa de Tempo
| Tarefa | Horas |
|---|---|
| Setup do projeto e DB | 2 |
| Entidades e repositórios | 5 |
| Serviços de negócio | 8 |
| Controllers REST | 5 |
| Segurança e permissões | 5 |
| Testes | 6 |
| Documentação | 2 |
| Bônus | 4-8 |
| Total | 33-41 |