Skip to content

Thalisson-DEV/desafio-angular-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

desafio-angular-api

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.

Status do Projeto: Estável Java 17+ Spring Boot 3.x Redis Caching JWT Security


📋 Índice


📚 Sobre o Projeto

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.

✨ Funcionalidades Principais

✅ 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.


⚡ Estratégia de Caching com Redis

O design do cache utiliza dois namespaces dedicados para garantir a consistência dos dados:

  1. 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.
  2. 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).

Consistência de Cache

  • Update/Save: Ao criar ou atualizar um produto, a operação utiliza @CachePut no product-item (atualiza o item individual) e simultaneamente utiliza @CacheEvict(allEntries = true) no product-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.

📌 Endpoints da API

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

🛠️ Tecnologias Utilizadas

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

⚙️ Como Executar o Projeto

Pré-requisitos

  • Java JDK 17 ou superior
  • Maven 3.x
  • Docker e Docker Compose

1. Clonar o Repositório

git clone https://github.com/Thalisson-DEV/desafio-angular-api.git
cd desafio-angular-api

2. Configurar e Iniciar Serviços (Redis)

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

3. Executar a Aplicação

Compile e execute a aplicação Spring Boot:

Compila, instala dependências e Executa a aplicação

mvn clean install
mvn spring-boot:run

A API estará rodando em http://localhost:8080.


🤝 Contribuições

Contribuições, sugestões e feedbacks são bem-vindos! Para contribuir:

  1. Bifurque o projeto (Fork).
  2. Crie uma branch de feature (git checkout -b feature/sua-melhoria).
  3. Faça commit de suas alterações.
  4. Abra um Pull Request para a branch master.

👤 Contato

Se você tiver dúvidas, sugestões ou quiser discutir o projeto:

About

API desenvolvida em Java e Spring para o desafio de angular da @Rocketseat

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages