API REST para gerenciamento e busca de livros da Amazon, com suporte a cache, upload de CSV, visualizações recentes e execução via Docker.
Organizada em camadas bem definidas:
application: Casos de uso da aplicaçãodomain: Entidades e regras de negócioadapters: Controllers e DTOsinfrastructure: Banco de dados, Redis e configurações
| Tecnologia | Descrição |
|---|---|
| Linguagem principal | |
| Framework principal | |
| Banco de dados | |
| Cache e armazenamento de sessões | |
| Containerização | |
| Controle de versionamento de banco | |
| Documentação da API | |
| Leitura de arquivos |
A Arquitetura Limpa foi escolhida para manter uma separação clara entre camadas da aplicação, facilitando:
- Testabilidade: camada de domínio pura, sem dependências de frameworks
- Manutenção e extensibilidade com menos acoplamento
- Independência da tecnologia, tornando a aplicação mais flexível para futuras mudanças
O uso de princípios de Código Limpo como SOLID, SRP e coesão garante código legível, com baixo acoplamento e fácil de evoluir.
- 📥 Importação de livros via CSV:
POST /api/books/import - 🔎 Busca paginada de livros:
GET /api/books - 📚 Busca por autor e gênero:
GET /api/books/author/{autor},genre/{genero} - 📖 Detalhes do livro por ID, registrando visualizações:
GET /api/books/{id} - 🕵️♂️ Livros visualizados recentemente por sessão:
GET /api/books/recentsly-viewed
Tabela: livros_amazon
Com índices otimizados para busca por autor e genero.
📸 Imagem ilustrativa da estrutura da tabela:
CREATE TABLE livros_amazon (
id BIGSERIAL PRIMARY KEY,
titulo VARCHAR(1000) NOT NULL,
autor VARCHAR(255),
genero VARCHAR(255) NOT NULL,
sub_genero VARCHAR(255),
tipo VARCHAR(255),
preco NUMERIC(10, 2) CHECK (preco >= 0),
avaliacao NUMERIC(3, 2) CHECK (avaliacao >= 0 AND avaliacao <= 5),
numero_avaliacoes INT CHECK (numero_avaliacoes >= 0),
url TEXT
);
CREATE INDEX idx_livros_autor ON livros_amazon (autor);
CREATE INDEX idx_livros_genero ON livros_amazon (genero);O conjunto de dados foi obtido do Amazon Books Dataset no Kaggle.
📎 Download direto do CSV usado no projeto:
📥 Baixar Books_df.csv
- Permite versionar o schema do banco de dados com segurança
- Traz rastreabilidade das alterações no banco
- Automatiza o setup do banco em ambientes diferentes
- Permite rollback seguro e evita divergência entre dev/prod
As migrations estão localizadas no diretório:
src/main/resources/db/migration
- Autenticação com JWT e controle por usuário
- Armazenar visualizações recentes por login
- Adicionar filtros avançados de busca (faixa de preço, avaliação etc.)
- Implementar CI/CD para builds automáticos
- Docker garantiu portabilidade e reprodutibilidade
- Redis melhorou performance e UX
- Arquitetura Limpa facilitou testes e modularidade
- Docker
- Docker Compose
git clone https://github.com/seu-usuario/wise-catalog-api.git
cd wise-catalog-api
./mvnw clean package -DskipTests
### 🚀 Rodar via Docker Compose
```bash
docker-compose up --buildAcesse em: http://localhost:8080
http://localhost:8080/swagger-ui.html
-
Faça o upload do arquivo CSV no endpoint:
POST /api/books/import Content-Type: multipart/form-data Body: arquivo Books_df.csv
-
Após a importação ser concluída com sucesso, acesse os endpoints:
GET /api/books/{id}→ Detalhe de um livro (exige headersession-id)GET /api/books/author/{author}→ Livros por autorGET /api/books/genre/{genre}→ Livros por gênero
-
A cada chamada ao
GET /api/books/{id}comsession-id, o livro será armazenado no Redis.- Use
GET /api/books/recentsly-viewedcom o mesmosession-idpara ver os últimos 5 livros acessados.
- Use
Desenvolvido por Fábio Ferreira para o desafio técnico proposto.
Para dúvidas, sugestões ou contribuições, abra uma issue ou envie um PR. 🚀

