Skip to content

tmontini/test-with-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redis Cache API

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.

🚀 Tecnologias Utilizadas

  • Java 21
  • Spring Boot 3.2.0
  • Spring Data Redis
  • Redis 7
  • Maven
  • JUnit 5
  • Testcontainers
  • Docker

📋 Funcionalidades

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

🏗️ Arquitetura

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

🔧 Pré-requisitos

  • Java 21
  • Maven 3.6+
  • Docker e Docker Compose

🚀 Como Executar

1. Clonar o repositório

git clone <repository-url>
cd test-with-docker

2. Iniciar o Redis com Docker Compose

docker-compose up -d

Isso iniciará:

  • Redis na porta 6379
  • Redis Commander (interface web) na porta 8081

3. Executar a aplicação

mvn spring-boot:run

A aplicação estará disponível em: http://localhost:8080

4. Acessar o Redis Commander (opcional)

Interface web para visualizar dados do Redis: http://localhost:8081

🧪 Executar Testes

Todos os testes

mvn test

Apenas testes unitários

mvn test -Dtest="*Test"

Apenas testes de integração

mvn test -Dtest="*IntegrationTest"

📚 Endpoints da API

Criar Conteúdo

POST /api/contents
Content-Type: application/json

{
  "title": "Meu Título",
  "description": "Minha descrição",
  "category": "Categoria"
}

Buscar Conteúdo por ID

GET /api/contents/{id}

Listar Todos os Conteúdos

GET /api/contents

Filtrar por Categoria

GET /api/contents?category=MinhaCategoria

Atualizar Conteúdo

PUT /api/contents/{id}
Content-Type: application/json

{
  "title": "Título Atualizado",
  "description": "Descrição atualizada",
  "category": "Nova Categoria"
}

Deletar Conteúdo

DELETE /api/contents/{id}

Verificar Existência

GET /api/contents/{id}/exists

Deletar Todos os Conteúdos

DELETE /api/contents

🔍 Validações

  • Título: Obrigatório, máximo 100 caracteres
  • Descrição: Obrigatória, máximo 500 caracteres
  • Categoria: Obrigatória, máximo 50 caracteres

🐳 Testcontainers

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

📊 Cobertura de 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

🛠️ Configuração

Configuração do Redis

As configurações do Redis podem ser alteradas no arquivo application.yml:

spring:
  data:
    redis:
      host: localhost
      port: 6379
      timeout: 2000ms

Perfis de Ambiente

  • default: Configuração para desenvolvimento
  • test: Configuração específica para testes

🔧 Troubleshooting

Redis não conecta

  1. Verifique se o Docker está rodando
  2. Execute docker-compose up -d para iniciar o Redis
  3. Verifique se a porta 6379 não está sendo usada por outro processo

Testes falhando

  1. Certifique-se de que o Docker está disponível
  2. Verifique se há recursos suficientes para executar containers
  3. Execute mvn clean test para limpar e executar novamente

📝 Próximos Passos

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages