API RESTful robusta desenvolvida em Spring Boot, projetada para ser o backend do desafio Angular proposto pela @Rocketseat, implementando autenticação JWT, gestão completa de produtos (CRUD) e otimização de performance via caching com Redis.
- Sobre o Projeto
- Funcionalidades Principais
- Estratégia de Caching com Redis
- Endpoints da API
- Tecnologias Utilizadas
- Como Executar o Projeto
- Contribuições
- Contato
A desafio-angular-api foi construída para atender aos requisitos de um backend moderno, fornecendo endpoints seguros, performáticos e bem estruturados para a gestão de produtos. O foco principal está na implementação completa do ciclo de vida do produto (CRUD) e na otimização de queries e leitura de dados utilizando o Spring Cache Abstraction com o Redis.
✅ 1. Autenticação JWT: Proteção de rotas utilizando tokens de acesso. ✅ Gestão de Produtos: Rotas de Criação, Leitura (por ID e lista), Atualização e Exclusão (CRUD). ✅ Paginação: Listagem de produtos paginada e com suporte a ordenação. ✅ Caching Inteligente: Uso do Redis para armazenar resultados de consultas, reduzindo a latência e a carga sobre o banco de dados.
O design do cache utiliza dois namespaces dedicados para garantir a consistência dos dados:
- Cache de Item Único (
product-item
):- Usado para buscas por ID (
/products/{id}
) e perfil de usuário (/auth/profile
). - Garante uma resposta imediata após a primeira consulta.
- Usado para buscas por ID (
- Cache de Lista (
product-list
):- Usado para a listagem paginada (
/products
). A chave de cache é gerada com base nos parâmetros de paginação (página, tamanho e ordenação).
- Usado para a listagem paginada (
- Update/Save: Ao criar ou atualizar um produto, a operação utiliza
@CachePut
noproduct-item
(atualiza o item individual) e simultaneamente utiliza@CacheEvict(allEntries = true)
noproduct-list
(limpa todas as páginas), forçando o recarregamento correto da lista na próxima requisição. - Delete: Remove a entrada individual e limpa todo o cache de lista via anotação
@Caching
.
Todos os endpoints protegidos exigem um header Authorization: Bearer <JWT_TOKEN>
.
Funcionalidade | Método | URL | Protegido (JWT)? |
---|---|---|---|
Login | POST |
/auth/login |
Não |
Perfil do Usuário | GET |
/auth/profile |
Sim |
Listar Produtos | GET |
/products?page=0&size=10&sort=id,asc |
Sim |
Buscar Produto por ID | GET |
/products/{id} |
Sim |
Criar Produto | POST |
/products |
Sim |
Atualizar Produto | PUT |
/products/{id} |
Sim |
Deletar Produto | DELETE |
/products/{id} |
Sim |
A API foi construída com foco em robustez, velocidade e aderência aos padrões de mercado.
- Linguagem: Java 17+
- Framework: Spring Boot 3.x
- Cache: Spring Data Redis
- Persistência: Spring Data JPA / Hibernate
- Banco de Dados: H2 Database (Em memória, para desenvolvimento)
- Segurança: Spring Security, JWT
- Build Tool: Maven
- Contêineres: Docker / Docker Compose
- Java JDK 17 ou superior
- Maven 3.x
- Docker e Docker Compose
git clone https://github.com/Thalisson-DEV/desafio-angular-api.git
cd desafio-angular-api
O Docker Compose é usado para iniciar a instância do Redis que a aplicação utilizará como cache.
# Inicia o contêiner do Redis em background
docker-compose up -d redis
Compile e execute a aplicação Spring Boot:
mvn clean install
mvn spring-boot:run
A API estará rodando em http://localhost:8080
.
Contribuições, sugestões e feedbacks são bem-vindos! Para contribuir:
- Bifurque o projeto (Fork).
- Crie uma branch de feature (
git checkout -b feature/sua-melhoria
). - Faça commit de suas alterações.
- Abra um Pull Request para a branch
master
.
Se você tiver dúvidas, sugestões ou quiser discutir o projeto:
- GitHub: ThalissonDEV - https://github.com/Thalisson-DEV
- Email: thalissondamiao1@gmail.com