CRUD completo de contatos com Spring Boot 3, PostgreSQL, Swagger e Bean Validation.
API REST para gerenciamento de uma agenda de contatos. O projeto é uma refatoração de um CRUD original em C# ASP.NET MVC, reescrito em Java com Spring Boot seguindo boas práticas de mercado: separação em camadas, DTOs, validações e tratamento centralizado de erros.
Projeto original (C# MVC): Projeto-MVC--Crud-completo-
| Método | Rota | Descrição |
|---|---|---|
GET |
/api/contatos |
Lista todos os contatos |
GET |
/api/contatos/ativos |
Lista apenas contatos ativos |
GET |
/api/contatos/{id} |
Busca contato por ID |
GET |
/api/contatos/buscar?nome= |
Busca por nome (parcial) |
GET |
/api/contatos/categoria/{categoria} |
Filtra por categoria |
POST |
/api/contatos |
Cria um novo contato |
PUT |
/api/contatos/{id} |
Atualiza um contato |
DELETE |
/api/contatos/{id} |
Remove um contato |
Documentação interativa: http://localhost:8080/swagger-ui.html
{
"nome": "João Silva",
"telefone": "(11) 99999-9999",
"email": "[email protected]",
"categoria": "TRABALHO",
"ativo": true
}Categorias disponíveis: PESSOAL · TRABALHO · FAMILIA · OUTRO
| Campo | Regra |
|---|---|
nome |
Obrigatório |
telefone |
Obrigatório · formato (99) 99999-9999 |
email |
Opcional · deve ser e-mail válido |
categoria |
Obrigatória · deve ser um valor do enum |
Erros de validação retornam 400 Bad Request com detalhes por campo.
| Tecnologia | Versão | Uso |
|---|---|---|
| Java | 21 | Linguagem |
| Spring Boot | 3.5 | Framework principal |
| Spring Data JPA | 3.5 | Persistência |
| PostgreSQL | 16 | Banco de dados |
| Hibernate | 6.x | ORM |
| Bean Validation | 3.x | Validações |
| SpringDoc OpenAPI | 2.x | Swagger / documentação |
| Lombok | latest | Redução de boilerplate |
| Maven | 3.x | Build |
Controller (HTTP)
↓
Service (regras de negócio)
↓
Repository (JPA / banco)
↓
PostgreSQL
src/main/java/com/rodrigopresida/agenda/
├── config/
│ └── SwaggerConfig.java
├── controller/
│ └── ContatoController.java
├── dto/
│ ├── ContatoRequestDTO.java
│ └── ContatoResponseDTO.java
├── exception/
│ ├── ApiErrorResponse.java
│ ├── ContatoNotFoundException.java
│ └── GlobalExceptionHandler.java
├── model/
│ ├── Categoria.java
│ └── Contato.java
├── repository/
│ └── ContatoRepository.java
├── service/
│ └── ContatoService.java
└── AgendaSpringBootApplication.java
- Java 21+
- Maven 3.x
- PostgreSQL 16+
CREATE DATABASE agenda_db;Edite src/main/resources/application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/agenda_db
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senhagit clone https://github.com/RodrigoPresida/agenda-spring-boot.git
cd agenda-spring-boot
./mvnw spring-boot:runA API estará disponível em http://localhost:8080
Swagger UI em http://localhost:8080/swagger-ui.html
30 testes automatizados com JUnit 5 + Mockito:
| Classe | Testes | Cobertura |
|---|---|---|
ContatoServiceTest |
14 | Todos os métodos do Service, incluindo cenários de erro |
ContatoControllerTest |
15 | Todos os endpoints REST com MockMvc, validações de request |
AgendaSpringBootApplicationTests |
1 | Smoke test — contexto Spring sobe sem erros |
Banco H2 em memória configurado para o ambiente de teste (não requer PostgreSQL).
./mvnw test
# Tests run: 30, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESSRodrigo Cruz dos Santos — Analista de Dados