API REST para gerenciamento de usuários e tarefas, desenvolvida em Java com Spring Boot como parte de um projeto de teste técnico.
A aplicação permite cadastrar usuários, criar e gerenciar tarefas, definir responsáveis, controlar o status das tarefas e consultar tarefas por status ou usuário.
- Java 17
- Spring Boot
- Spring Data JPA
- Spring Validation
- H2 Database
- Maven
- REST API
- Swagger / OpenAPI
O projeto segue uma arquitetura em camadas, separando as responsabilidades da aplicação:
Controller
↓
Service
↓
Repository
↓
Entity
Também são utilizados DTOs para entrada e saída de dados, evitando a exposição direta das entidades JPA.
src/main/java/br/com/wbytesistemas/tasker_api/
├── controller/
│ ├── UserController.java
│ └── TaskController.java
│
├── service/
│ ├── UserService.java
│ └── TaskService.java
│
├── repository/
│ ├── UserRepository.java
│ └── TaskRepository.java
│
├── entity/
│ ├── UserEntity.java
│ ├── TaskEntity.java
│ └── TaskerStatus.java
│
├── dto/
│ ├── UserRequestDTO.java
│ ├── UserResponseDTO.java
│ ├── TaskRequestDTO.java
│ └── TaskResponseDTO.java
│
└── exception/
├── ResourceNotFoundException.java
├── EmailAlreadyExistsException.java
└── GlobalExceptionHandler.java
- Cadastro de usuários
- Validação de nome e e-mail
- Validação do formato do e-mail
- E-mail único
- Listagem de usuários
- Registro automático da data de criação
- Cadastro de tarefas
- Título obrigatório
- Descrição opcional
- Controle de status
- Data de vencimento
- Associação da tarefa a um usuário responsável
- Listagem de tarefas
- Filtro por status
- Listagem de tarefas por usuário
- Atualização de tarefas
- Exclusão de tarefas
- Validação da data de vencimento
As tarefas podem possuir um dos seguintes status:
PENDENTE
EM_ANDAMENTO
CONCLUIDA
POST /usersExemplo de requisição:
{
"nome": "Willian Oliveira",
"email": "willian@email.com"
}GET /usersPOST /tasksExemplo:
{
"titulo": "Task teste",
"descricao": "Um teste de texto para testar a task",
"status": "PENDENTE",
"dataVencimento": "2026-10-10",
"userId": 1
}GET /tasksGET /tasks?status=PENDENTEExemplos de status:
PENDENTE
EM_ANDAMENTO
CONCLUIDA
GET /tasks/user/{userId}Exemplo:
GET /tasks/user/1GET /tasks/{id}PUT /tasks/{id}Exemplo:
{
"titulo": "Task teste",
"descricao": "Um teste de texto para testar a task",
"status": "EM_ANDAMENTO",
"dataVencimento": "2026-10-15",
"userId": 1
}DELETE /tasks/{id}A API possui validações para garantir a consistência dos dados.
- Nome obrigatório
- E-mail obrigatório
- E-mail deve possuir formato válido
- E-mail não pode ser duplicado
- Título obrigatório
- Usuário responsável deve existir
- Status deve ser válido
- Data de vencimento não pode ser anterior à data atual
A aplicação possui tratamento global de exceções utilizando @RestControllerAdvice.
São tratados, entre outros:
- Recursos não encontrados →
404 Not Found - E-mail já cadastrado →
400 Bad Request - Erros de validação →
400 Bad Request
O projeto utiliza o H2 Database para facilitar a execução e os testes da aplicação.
As principais tabelas são:
tb_users
├── id
├── nome
├── email
└── created_at
tb_tasks
├── id
├── titulo
├── descricao
├── status
├── due_date
└── user_id
A tabela tb_tasks possui um relacionamento ManyToOne com tb_users.
User 1 ─────────── N Task
Uma tarefa possui um único usuário responsável, enquanto um usuário pode ser responsável por várias tarefas.
A documentação da API está disponível através do Swagger UI.
Com a aplicação em execução, acesse:
http://localhost:8080/swagger-ui/index.html
O Swagger permite visualizar e testar os endpoints diretamente pelo navegador.
- Java 17 ou superior
- Maven
- Git
git clone https://github.com/Willian0liveira/tasker-api.gitEntrar no diretório:
cd tasker-apiNo Windows:
mvnw.cmd spring-boot:runLinux/macOS:
./mvnw spring-boot:runOu execute a classe principal da aplicação pela IDE.
A API estará disponível em:
http://localhost:8080
A API pode ser testada utilizando ferramentas como:
- Swagger UI
- Postman
- Insomnia
- Thunder Client
O Swagger é recomendado para uma primeira visualização dos endpoints e contratos da API.
| Código | Utilização |
|---|---|
200 OK |
Operação realizada com sucesso |
201 Created |
Recurso criado com sucesso |
204 No Content |
Operação realizada sem conteúdo de retorno |
400 Bad Request |
Dados inválidos ou erro de validação |
404 Not Found |
Recurso não encontrado |
O projeto foi desenvolvido com foco na aplicação de conceitos de desenvolvimento de APIs REST utilizando Java e Spring Boot, incluindo:
- Arquitetura em camadas
- Injeção de dependências
- Spring Data JPA
- Relacionamentos entre entidades
- DTOs
- Bean Validation
- Tratamento global de exceções
- Persistência de dados
- HTTP Status Codes
- Documentação com OpenAPI/Swagger
- Boas práticas de organização e Clean Code
Willian Oliveira
Desenvolvedor Mobile & Web
Linkedin:
https://linkedin.com/in/willian0liveira
Portfólio:
https://wbytesistemas.com.br