Uma aplicação Spring Boot com Java 21 que implementa uma API REST para gerenciamento de cache usando Redis. A aplicação segue as melhores práticas de código limpo e princípios SOLID, com testes unitários e de integração usando Testcontainers.
- Java 21
- Spring Boot 3.2.0
- Spring Data Redis
- Redis 7
- Maven
- JUnit 5
- Testcontainers
- Docker
A API oferece operações CRUD completas para gerenciamento de conteúdo em cache:
- ✅ Criar conteúdo
- ✅ Buscar conteúdo por ID
- ✅ Listar todos os conteúdos
- ✅ Filtrar conteúdos por categoria
- ✅ Atualizar conteúdo
- ✅ Deletar conteúdo
- ✅ Verificar existência de conteúdo
- ✅ Deletar todos os conteúdos
A aplicação segue os princípios de Clean Architecture e SOLID:
src/
├── main/java/com/example/rediscache/
│ ├── domain/
│ │ ├── model/ # Entidades de domínio
│ │ ├── repository/ # Interfaces de repositório
│ │ └── service/ # Serviços de domínio
│ ├── infrastructure/
│ │ ├── config/ # Configurações
│ │ └── repository/ # Implementações de repositório
│ └── presentation/
│ ├── controller/ # Controllers REST
│ ├── dto/ # DTOs de entrada/saída
│ └── exception/ # Tratamento de exceções
└── test/
├── integration/ # Testes de integração
└── unit/ # Testes unitários
- Java 21
- Maven 3.6+
- Docker e Docker Compose
git clone <repository-url>
cd test-with-dockerdocker-compose up -dIsso iniciará:
- Redis na porta 6379
- Redis Commander (interface web) na porta 8081
mvn spring-boot:runA aplicação estará disponível em: http://localhost:8080
Interface web para visualizar dados do Redis: http://localhost:8081
mvn testmvn test -Dtest="*Test"mvn test -Dtest="*IntegrationTest"POST /api/contents
Content-Type: application/json
{
"title": "Meu Título",
"description": "Minha descrição",
"category": "Categoria"
}GET /api/contents/{id}GET /api/contentsGET /api/contents?category=MinhaCategoriaPUT /api/contents/{id}
Content-Type: application/json
{
"title": "Título Atualizado",
"description": "Descrição atualizada",
"category": "Nova Categoria"
}DELETE /api/contents/{id}GET /api/contents/{id}/existsDELETE /api/contents- Título: Obrigatório, máximo 100 caracteres
- Descrição: Obrigatória, máximo 500 caracteres
- Categoria: Obrigatória, máximo 50 caracteres
Os testes de integração utilizam Testcontainers para criar containers Docker temporários do Redis, garantindo:
- Isolamento completo entre testes
- Ambiente idêntico ao de produção
- Testes confiáveis e reproduzíveis
- Limpeza automática após os testes
A aplicação possui testes abrangentes cobrindo:
- ✅ Testes unitários do modelo de domínio
- ✅ Testes unitários dos serviços
- ✅ Testes de integração do repositório Redis
- ✅ Testes de integração da API REST
- ✅ Testes de validação de entrada
- ✅ Testes de tratamento de exceções
As configurações do Redis podem ser alteradas no arquivo application.yml:
spring:
data:
redis:
host: localhost
port: 6379
timeout: 2000ms- default: Configuração para desenvolvimento
- test: Configuração específica para testes
- Verifique se o Docker está rodando
- Execute
docker-compose up -dpara iniciar o Redis - Verifique se a porta 6379 não está sendo usada por outro processo
- Certifique-se de que o Docker está disponível
- Verifique se há recursos suficientes para executar containers
- Execute
mvn clean testpara limpar e executar novamente
- Implementar autenticação e autorização
- Adicionar métricas e monitoramento
- Implementar cache com TTL configurável
- Adicionar documentação OpenAPI/Swagger
- Implementar paginação para listagem