Skip to content

Matheuslpr/e-commerce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

E-commerce API

API REST para gerenciamento de e-commerce, com autenticação JWT, controle de estoque e pedidos, desenvolvida com Spring Boot e arquitetura em camadas.

Sobre o Projeto

A E-commerce API centraliza as operações essenciais de uma loja virtual: cadastro de produtos, controle de estoque, criação de pedidos e autenticação de usuários. O projeto foi desenvolvido com foco em:

  • Segurança: Autenticação JWT com controle de acesso por roles (USER e ADMIN)
  • Integridade de dados: Validações de entrada e regras de negócio bem definidas
  • Consistência de estoque: Baixa automática ao criar pedidos e movimentações manuais auditáveis
  • Documentação: Swagger/OpenAPI cobrindo todos os endpoints
  • Versionamento de banco: Controle de schema via Flyway

Arquitetura

O projeto segue uma arquitetura em camadas:

src/main/java/dev/matheus/
├── config/         # Configurações do Spring Security e OpenAPI
├── controller/      # Controllers REST
├── doc/             # Interfaces de documentação Swagger dos controllers
├── dto/             # Objetos de transferência de dados (requests/responses)
├── exceptions/      # Exceções customizadas e tratamento global de erros
├── mapper/          # Conversão entre entidades e DTOs
├── model/           # Entidades JPA
├── repository/       # Repositórios Spring Data
└── security/        # Geração/validação de JWT, filtros e autenticação

Tecnologias Utilizadas

Backend

  • Java 17
  • Spring Boot: framework principal da aplicação
  • Spring Security: autenticação e autorização
  • Spring Data JPA / Hibernate: persistência de dados
  • JWT (java-jwt / jjwt): tokens para autenticação stateless
  • Bean Validation: validação de DTOs

Banco de Dados

  • PostgreSQL 16: banco de dados relacional
  • Flyway: migrations para controle do schema

Ferramentas de Desenvolvimento

  • Maven: gerenciamento de dependências e build
  • Docker Compose: orquestração do banco de dados
  • Springdoc OpenAPI: documentação da API (Swagger)

Funcionalidades

Autenticação e Autorização

  • Registro e login de usuários
  • Autenticação via JWT (HMAC256, expiração configurável)
  • Proteção de rotas por role (USER, ADMIN) com @PreAuthorize
  • Consulta do próprio usuário autenticado (/auth/me)

Gerenciamento de Produtos

  • CRUD completo de produtos
  • Validação de dados (nome, preço positivo, quantidade)
  • Acesso de escrita restrito a ADMIN

Pedidos

  • Criação de pedidos com múltiplos itens
  • Cálculo automático do valor total
  • Baixa automática de estoque ao criar o pedido

Movimentação de Estoque

  • Registro manual de entradas (PURCHASE) e saídas (SALE)
  • Histórico de movimentações por produto

Usuários

  • Consulta administrativa de todos os usuários (ADMIN)

Como Executar

Passo a Passo

Clone o repositório:

git clone https://github.com/Matheuslpr/e-commerce.git
cd e-commerce

Crie um arquivo .env na raiz do projeto:

JWT_SECRET=SUBSTITUA_POR_UMA_CHAVE_SECRETA_FORTE_E_ALEATORIA

Suba o banco de dados com Docker:

docker compose up -d

Execute a aplicação:

./mvnw spring-boot:run

Ou, no Windows:

mvnw.cmd spring-boot:run

A API estará disponível em http://localhost:8080

Variável de Ambiente

| JWT_SECRET | Chave secreta usada para assinar e validar os tokens JWT |

Documentação da API

Com a aplicação em execução, a documentação interativa (Swagger) fica disponível em:

http://localhost:8080/swagger-ui/index.html

Especificação OpenAPI em JSON:

http://localhost:8080/v3/api-docs

Para testar endpoints protegidos, clique em Authorize e informe o token no formato Bearer <seu_token_jwt>.

Endpoints

Autenticação

  • POST /auth/login — Login e geração de token JWT
  • POST /auth/register — Registrar novo usuário
  • GET /auth/me — Consultar o próprio usuário autenticado

Usuários

  • GET /user — Listar todos os usuários (ADMIN)
  • GET /user/{id} — Buscar usuário por ID (ADMIN)

Produtos

  • GET /products — Listar produtos
  • GET /products/{id} — Buscar produto por ID
  • POST /products — Criar produto (ADMIN)
  • PUT /products/{id} — Atualizar produto (ADMIN)
  • DELETE /products/{id} — Remover produto (ADMIN)

Pedidos

  • GET /orders — Listar pedidos
  • GET /orders/{id} — Buscar pedido por ID
  • POST /orders — Criar pedido (com baixa automática de estoque)

Movimentação de Estoque

  • GET /stock_movements — Listar movimentações
  • GET /stock_movements/{id} — Buscar movimentação por ID
  • POST /stock_movements — Registrar movimentação (PURCHASE ou SALE)

Tratamento de Erros

Os erros são centralizados no GlobalExceptionHandler e retornam sempre um JSON padronizado com timestamp, status, error e message.

Status Cenário
400 Bad Request Validação falhou ou regra de negócio violada (ex.: e-mail já cadastrado)
401 Unauthorized Token ausente/inválido ou credenciais incorretas
403 Forbidden Usuário autenticado sem a role necessária
404 Not Found Recurso não encontrado (produto, pedido, etc.)

Docker

O docker-compose.yml sobe apenas o banco de dados PostgreSQL:

services:
  db:
    image: postgres:16-alpine
    container_name: ecommerce
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: ecommerce_db
    ports:
      - "5431:5434"
docker compose up -d      # subir o banco
docker compose down       # parar
docker logs -f ecommerce  # ver logs

A preencher: ainda não existe um Dockerfile para a aplicação — apenas o banco é containerizado.

Licença

Este projeto está sob a licença Apache 2.0 — veja https://www.apache.org/licenses/LICENSE-2.0 para detalhes.e](https://github.com/Matheuslpr/e-commerce)

About

Back-end simples de um E-commerce

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages