Bem-vindo ao sistema de gerenciamento de e-commerce! Esta é uma API RESTful desenvolvida em Java/Spring Boot que oferece todas as funcionalidades necessárias para administrar uma loja virtual, desde autenticação segura até relatórios detalhados.
Um backend robusto para lojas virtuais, com:
- Cadastro e login de usuários com tokens JWT
- Controle de acesso por perfis (Administrador e Cliente)
- Proteção automática contra acesso não autorizado
- Cadastro completo de produtos com nome, descrição, preço e categoria
- Controle inteligente de estoque
- Busca pública de produtos (sem necessidade de login)
- Carrinho de compras com múltiplos produtos
- Fluxo completo: pedido → pagamento → atualização de estoque
- Cancelamento automático se faltar produtos no estoque
- Relatórios dos melhores clientes
- Análise de ticket médio por usuário
- Dashboard de faturamento mensal
| Tecnologia | Finalidade |
|---|---|
| Java 17 | Linguagem principal |
| Spring Boot 3.2 | Framework backend |
| Spring Security | Autenticação e autorização |
| JWT | Tokens de acesso seguros |
| MySQL 8.0 | Banco de dados |
| Spring Data JPA | Persistência de dados |
| Maven | Gerenciamento de dependências |
Antes de começar, verifique se você tem instalado:
- Java 17 ou superior
- MySQL 8.0 ou superior
- Maven 3.6 ou superior
CREATE DATABASE ecommerce_db;
Passo 2: Configurar a aplicação
Edite o arquivo src/main/resources/application.properties:
properties
spring.datasource.url=jdbc:mysql://localhost:3306/ecommerce_db
spring.datasource.username=seu_usuario_mysql
spring.datasource.password=sua_senha_mysql
Passo 3: Executar a aplicação
bash
# Via Maven
mvn spring-boot:run
# Ou compile e execute
mvn clean install
java -jar target/order-system-1.0.0.jar
Passo 4: Acessar a aplicação
text
Servidor rodando em: http://localhost:8080
📡 Como usar a API
🔐 Primeiros passos - Autenticação
1. Criar uma conta de administrador:
http
POST /api/auth/register-admin
Content-Type: application/json
{
"username": "admin",
"password": "senha123"
}
2. Fazer login:
http
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "senha123"
}
Resposta: {"token": "seu-jwt-token", "username": "admin"}
Guarde o token retornado! Você precisará dele para as próximas requisições.
📦 Gerenciando produtos (Administrador)
Adicionar novo produto:
http
POST /api/products
Authorization: Bearer seu-jwt-token
Content-Type: application/json
{
"name": "Smartphone Samsung Galaxy",
"description": "Smartphone Android com 128GB, câmera tripla",
"price": 1999.99,
"category": "Celulares",
"stockQuantity": 50
}
Listar produtos (público - não precisa de token):
http
GET /api/products
🛒 Realizando compras (Cliente)
Criar pedido:
http
POST /api/orders
Authorization: Bearer token-do-cliente
Content-Type: application/json
{
"items": [
{
"productId": "id-do-produto-1",
"quantity": 2
},
{
"productId": "id-do-produto-2",
"quantity": 1
}
]
}
Pagar pedido:
http
POST /api/orders/{id-do-pedido}/pay
Authorization: Bearer token-do-cliente
📊 Relatórios (Apenas Administrador)
Top 5 clientes:
http
GET /api/admin/reports/top-customers
Authorization: Bearer token-do-admin
Ticket médio por usuário:
http
GET /api/admin/reports/average-ticket
Authorization: Bearer token-do-admin
Faturamento do mês:
http
GET /api/admin/reports/monthly-revenue
Authorization: Bearer token-do-admin
🗃️ Estrutura do Banco de Dados
O sistema utiliza 4 tabelas principais:
users - Usuários e administradores
products - Catálogo de produtos
orders - Pedidos dos clientes
order_items - Itens de cada pedido
📁 O dump completo do banco está disponível em: /database/ecommerce_dump.sql
🧪 Testando a Aplicação
Usuários de exemplo para teste:
Administrador:
Usuário: admin.loja
Senha: admin123
Cliente:
Usuário: ederson.silva
Senha: senha123
Fluxo completo sugerido para teste:
Cadastre-se como administrador
http
POST /api/auth/register-admin
{"username": "admin.loja", "password": "admin123"}
Faça login como administrador
http
POST /api/auth/login
{"username": "admin.loja", "password": "admin123"}
Guarde o token retornado
Adicione produtos
http
POST /api/products
Authorization: Bearer token-admin
{
"name": "iPhone 15",
"description": "Smartphone Apple 128GB",
"price": 4999.99,
"category": "Celulares",
"stockQuantity": 20
}
Crie uma conta de cliente
http
POST /api/auth/register
{"username": "ederson.silva", "password": "senha123"}
Faça login como cliente
http
POST /api/auth/login
{"username": "ederson.silva", "password": "senha123"}
Guarde o token do cliente
Liste produtos (sem token)
http
GET /api/products
Crie um pedido
http
POST /api/orders
Authorization: Bearer token-cliente
{
"items": [
{
"productId": "id-do-iphone",
"quantity": 1
}
]
}
Pague o pedido
http
POST /api/orders/{id-pedido}/pay
Authorization: Bearer token-cliente
Verifique relatórios (como admin)
http
GET /api/admin/reports/top-customers
Authorization: Bearer token-admin
📋 Endpoints Completos
🔐 Autenticação (Público)
POST /api/auth/register - Registrar usuário normal
POST /api/auth/register-admin - Registrar administrador
POST /api/auth/login - Login (retorna JWT)
📦 Produtos
GET /api/products - Listar produtos (Público)
GET /api/products/{id} - Buscar produto por ID (Público)
POST /api/products - Criar produto (Apenas ADMIN)
PUT /api/products/{id} - Atualizar produto (Apenas ADMIN)
DELETE /api/products/{id} - Deletar produto (Apenas ADMIN)
🛒 Pedidos
POST /api/orders - Criar pedido (USER/ADMIN)
GET /api/orders/my-orders - Meus pedidos (USER/ADMIN)
POST /api/orders/{id}/pay - Pagar pedido (USER/ADMIN)
GET /api/orders - Listar todos pedidos (Apenas ADMIN)
📊 Relatórios (Apenas ADMIN)
GET /api/admin/reports/top-customers - Top 5 clientes
GET /api/admin/reports/average-ticket - Ticket médio por usuário
GET /api/admin/reports/monthly-revenue - Faturamento mensal
GET /api/admin/reports/monthly-revenue/{ano}/{mes} - Faturamento específico
🐛 Solução de Problemas
Erro de Conexão com MySQL
Verifique se o MySQL está rodando
Confirme usuário e senha no application.properties
Teste a conexão: mysql -u root -p
Erro 403 - Acesso Negado
Verifique se o token JWT está correto
Confirme se o usuário tem a role necessária
Teste login novamente para gerar novo token
Erro 500 - Erro Interno
Verifique os logs da aplicação
Confirme se todas as tabelas foram criadas
Execute: mvn clean install e reinicie
📞 Suporte
Se tiver dúvidas ou encontrar algum problema:
Verifique os logs da aplicação
Confirme se o banco de dados está conectado
Teste os endpoints com o Postman usando os exemplos acima
Desenvolvido usando Spring Boot e Java
Projeto desenvolvido para demonstração de habilidades em desenvolvimento backend