Pular para o conteúdo principal

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​

RoleProjetosTarefasMembros
ADMINCRUD todosCRUD todosGerenciar todos
MANAGERCRUD própriosCRUD projetosGerenciar projetos
MEMBERLer atribuídasCRUD 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​

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

TarefaHoras
Setup do projeto e DB2
Entidades e repositórios5
Serviços de negócio8
Controllers REST5
Segurança e permissões5
Testes6
Documentação2
Bônus4-8
Total33-41

Voltar ao Projeto Final