API REST de e-commerce desenvolvida com Spring Boot, projetada para simular um ambiente real de loja virtual com foco em:
- Arquitetura em camadas
- Segurança baseada em JWT
- Separação clara de responsabilidades
- Preparação para ambiente distribuído
- Boas práticas de backend
O projeto busca refletir padrões utilizados em aplicações reais de mercado.
Backend
- Java 21
- Spring Boot
- Spring Security
- Spring Web
- Spring Data JPA
- OAuth2 Resource Server
- Bean Validation
- Maven
Banco de dados
- PostgreSQL
- H2
Infraestrutura
- Docker & docker-compose
- Redis
- Amazon S3
- Deploy
Client -> Controller -> Service -> Repository -> Database
Controller
- Recebe requisição HTTP
- Valida entrada de dados
- Retorna respostas padronizadas
Service
- Aplica regra de negócio
- Controla fluxo da aplicação
- Garante consistência de dados
Repository
- Comunicação com o banco de dados via JPA
Security
- Configuração do Spring Security
- Controle de acesso baseado em roles
Infrastructure
- Integrações externas (Redis, S3)
A API utiliza Spring Security com OAuth2 Resource Server.
- Autenticação stateless baseada em JWT
- Token contém claims de roles
- Conversão de roles para GrantedAuthority
- Controle de acesso via autorização por role
- Rotas públicas e protegidas configuradas explicitamente
- Usuário realiza login em
/auth/login - API gera token JWT
- Cliente envia token no header
Authorization: Bearer ${JWT} - Token é validado pelo Resource Server
- Acesso é concedido conforme role
- CUSTOMER
- SELLER
- ADMIN
- Registro de usuário
- Login com geração de JWT
- Visualização de perfil
- Atualização de dados
- Exclusão de contas
- CRUD completo
- Controle de estoque
- Upload de imagem (planejado para S3)
- Associado ao usuário autenticado
- Armazenamento temporário com Redis
- Conversão do carrinho em pedido
- Cálculo automático do total
- Atualização transacional de estoque
POST /auth/register
Request:
{
"username": "username",
"password": "password",
"firstName": "firstName",
"lastName": "lastName"
}POST /auth/login
Request:
{
"username": "username",
"password": "password"
}Response:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Authorization: Bearer {token}
O projeto possui testes unitários utilizando:
- JUnit 5
- Mockito
- Regras de negócio da camada Service
- Validação de fluxos críticos
- Comportamentos esperados em cenários de sucesso e erro
- Uso de Exception Handler Global
- Respostas padronizadas
- Códigos HTTP adequados
- Validação com
Bean Validation
A API é documentada utilizando Swagger, permitindo visualizar e testar os endpoints de forma interativa.
- Swagger UI
http://localhost:8080/swagger-ui.html
- Especificação OpenAPI
http://localhost:8080/v3/api-docs
- Descrição detalhada de endpoints
- Estrutura de request e response
- Códigos HTTP possíveis
- Java 21+
- Maven
- Docker & docker-compose
[ TEMPORÁRIO ]
git clone https://github.com/0xCsr/ecommerce-backend.git
cd ecommerce-backend
mvn spring-boot:runA aplicação iniciará em:
http://localhost:8080
- Implementar domínio completo
- Finalizar autenticação JWT stateless
- Implementar controle de estoque transacional
- Integrar PostgreSQL para ambiente de produção
- Containerizar aplicação
- Implementar cache com Redis
- Adicionar testes unitários e de integração
- Documentar API com Swagger/OpenAPI
- Deploy em ambiente cloud (AWS ou Railway)
Esse projeto foi desenvolvido como parte do meu processo de evolução como desenvolvedor backend Java, com foco em:
- Arquitetura limpa
- Segurança
- Boas práticas de mercado
- Preparação para sistemas escaláveis
César Missias
GitHub: https://github.com/0xCsr
Linkedin: https://www.linkedin.com/in/csrjr/