Uma aplicação Java moderna para gerenciamento de usuários construída com Spring Boot, Maven e H2 Database.
- ✅ CRUD completo de usuários (Create, Read, Update, Delete)
- 🔍 Busca avançada por nome, email e faixa etária
- 🔄 Ativação/Desativação de usuários (soft delete)
- 📊 Estatísticas de usuários (ativos, inativos, total)
- 🛡️ Validação de dados com Bean Validation
- 🗄️ Banco de dados H2 em memória
- 🧪 Testes unitários e de integração completos
- 📈 Cobertura de código com JaCoCo
- Java 11
- Spring Boot 2.7.0
- Spring Data JPA
- H2 Database
- Maven
- JUnit 4
- Mockito
- JaCoCo (cobertura de código)
- Java 11 ou superior
- Maven 3.6 ou superior
- Docker e Docker Compose (opcional)
- Clone o repositório:
git clone <url-do-repositorio>
cd example-java-maven
- Compile e execute:
mvn clean install
mvn spring-boot:run
- Acesse a aplicação:
- API REST: http://localhost:8080/api/users
- Console H2: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password:
password
- JDBC URL:
- Clone o repositório:
git clone <url-do-repositorio>
cd example-java-maven
- Execute com Docker Compose (recomendado):
# Build e execução automática
./docker-run.sh
# Ou manualmente:
mvn clean package -DskipTests
docker-compose up -d
- Verificar status:
docker-compose ps
- Acessar logs:
docker-compose logs -f
- Parar a aplicação:
docker-compose down
- Acesse a aplicação:
- API REST: http://localhost:8080/api/users
- Console H2: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password:
password
- JDBC URL:
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/users |
Criar novo usuário |
GET |
/api/users |
Listar todos os usuários |
GET |
/api/users/{id} |
Buscar usuário por ID |
GET |
/api/users/email/{email} |
Buscar usuário por email |
PUT |
/api/users/{id} |
Atualizar usuário |
PATCH |
/api/users/{id}/activate |
Ativar usuário |
PATCH |
/api/users/{id}/deactivate |
Desativar usuário |
DELETE |
/api/users/{id} |
Deletar usuário permanentemente |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/users/active |
Listar usuários ativos |
GET |
/api/users/search?name={name} |
Buscar usuários por nome |
GET |
/api/users/age-range?minAge={min}&maxAge={max} |
Buscar por faixa etária |
GET |
/api/users/stats |
Estatísticas dos usuários |
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"email": "joao@email.com",
"phone": "11999999999",
"age": 30
}'
curl http://localhost:8080/api/users
curl http://localhost:8080/api/users/1
curl -X PUT http://localhost:8080/api/users/1 \
-H "Content-Type: application/json" \
-d '{
"name": "João Santos",
"email": "joao@email.com",
"phone": "11888888888",
"age": 31
}'
# Executar todos os testes
mvn test
# Executar testes com relatório de cobertura
mvn clean test jacoco:report
# Ver relatório de cobertura
open target/site/jacoco/index.html
src/
├── main/
│ ├── java/com/example/usermanagement/
│ │ ├── UserManagementApplication.java # Classe principal
│ │ ├── controller/
│ │ │ └── UserController.java # Controller REST
│ │ ├── service/
│ │ │ └── UserService.java # Lógica de negócio
│ │ ├── repository/
│ │ │ └── UserRepository.java # Acesso a dados
│ │ └── model/
│ │ └── User.java # Entidade JPA
│ └── resources/
│ └── application.properties # Configurações
└── test/
└── java/com/example/usermanagement/
├── UserManagementApplicationTest.java # Testes de integração
├── service/
│ └── UserServiceTest.java # Testes unitários do service
└── controller/
└── UserControllerTest.java # Testes unitários do controller
## 🐳 Docker
### Arquivos Docker
- `Dockerfile` - Configuração da imagem Docker
- `docker-compose.yml` - Orquestração dos containers
- `.dockerignore` - Arquivos ignorados no build
- `docker-run.sh` - Script automatizado para build e execução
### Comandos Docker Úteis
```bash
# Build da imagem
docker build -t user-management-app .
# Executar container
docker run -p 8080:8080 user-management-app
# Ver logs do container
docker-compose logs -f
# Parar todos os containers
docker-compose down
# Remover volumes e imagens
docker-compose down -v --rmi all
As configurações da aplicação estão no arquivo application.properties:
- Porta: 8080
- Banco de dados: H2 em memória
- Console H2: Habilitado em
/h2-console - Logs: Configurados para DEBUG
O projeto utiliza JaCoCo para análise de cobertura de código:
mvn clean test jacoco:report
O relatório será gerado em target/site/jacoco/index.html
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ usando Spring Boot e Java.