Skip to content

edersonaguiar/ecommerce-backend-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛍️ Sistema de E-commerce - Backend Completo

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.

✨ O que este projeto oferece?

Um backend robusto para lojas virtuais, com:

🔐 Sistema de Segurança

  • 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

📦 Catálogo de Produtos

  • 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)

🛒 Experiência de Compra

  • Carrinho de compras com múltiplos produtos
  • Fluxo completo: pedido → pagamento → atualização de estoque
  • Cancelamento automático se faltar produtos no estoque

📊 Painel Administrativo

  • Relatórios dos melhores clientes
  • Análise de ticket médio por usuário
  • Dashboard de faturamento mensal

🛠️ Tecnologias Utilizadas

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

🚀 Como executar o projeto

Pré-requisitos

Antes de começar, verifique se você tem instalado:

  • Java 17 ou superior
  • MySQL 8.0 ou superior
  • Maven 3.6 ou superior

Passo 1: Preparar o banco de dados

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages