Pular para o conteúdo principal

Projeto A: Plataforma E-Commerce

Descrição​

Desenvolva uma API RESTful completa para uma plataforma de comércio eletrônico permitindo a gestão de produtos, usuários, carrinho e pedidos.


Funcionalidades Requeridas​

1. Gestão de Usuários​

POST   /api/auth/register     - Cadastro
POST /api/auth/login - Login (retorna JWT)
GET /api/users/me - Perfil do usuário
PUT /api/users/me - Editar perfil

Entidade User:

  • id, email, password, firstName, lastName
  • role (CUSTOMER, ADMIN)
  • createdAt, updatedAt

2. Catálogo de Produtos​

GET    /api/products              - Lista de produtos (paginação)
GET /api/products/{id} - Detalhe de um produto
GET /api/products/search - Busca por nome/categoria
POST /api/products - Criar produto (ADMIN)
PUT /api/products/{id} - Editar produto (ADMIN)
DELETE /api/products/{id} - Remover produto (ADMIN)

Entidade Product:

  • id, name, description, price, stock
  • category (relação ManyToOne)
  • imageUrl, active

Entidade Category:

  • id, name, description

3. Carrinho​

GET    /api/cart                  - Ver carrinho
POST /api/cart/items - Adicionar produto
PUT /api/cart/items/{id} - Alterar quantidade
DELETE /api/cart/items/{id} - Remover do carrinho
DELETE /api/cart - Esvaziar carrinho

Entidade CartItem:

  • id, cart, product, quantity, price

4. Pedidos​

POST   /api/orders                - Criar pedido (a partir do carrinho)
GET /api/orders - Lista de pedidos (usuário)
GET /api/orders/{id} - Detalhe do pedido
PUT /api/orders/{id}/status - Alterar status (ADMIN)
GET /api/admin/orders - Todos os pedidos (ADMIN)

Entidade Order:

  • id, user, items, totalAmount
  • status (PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED)
  • shippingAddress, createdAt

Esquema do Banco de Dados​

users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
└── created_at

categories
├── id (PK)
├── name
└── description

products
├── id (PK)
├── name
├── description
├── price
├── stock
├── category_id (FK)
├── image_url
└── active

carts
├── id (PK)
└── user_id (FK, UNIQUE)

cart_items
├── id (PK)
├── cart_id (FK)
├── product_id (FK)
├── quantity
└── price

orders
├── id (PK)
├── user_id (FK)
├── total_amount
├── status
├── shipping_address
└── created_at

order_items
├── id (PK)
├── order_id (FK)
├── product_id (FK)
├── quantity
├── price
└── product_name

Regras de Negócio​

Estoque​

  • Verificar disponibilidade antes de adicionar ao carrinho
  • Decrementar o estoque ao criar pedido
  • Restaurar o estoque se o pedido for cancelado

Preço​

  • O preço no carrinho deve ser o atual
  • O preço no pedido é fixado

Carrinho​

  • Um usuário possui apenas um carrinho
  • O carrinho é criado automaticamente
  • O carrinho é esvaziado após um pedido

Pedidos​

  • Apenas o usuário pode ver seus pedidos
  • Admin pode ver todos os pedidos
  • Transições de status válidas:
    • PENDING -> CONFIRMED -> SHIPPED -> DELIVERED
    • PENDING -> CANCELLED
    • CONFIRMED -> CANCELLED

Endpoints Detalhados​

Autenticação​

POST /api/auth/register
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!",
"firstName": "John",
"lastName": "Doe"
}

Response 201:
{
"id": 1,
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"role": "CUSTOMER"
}
POST /api/auth/login
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!"
}

Response 200:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"expiresIn": 86400
}

Produtos​

GET /api/products?page=0&size=10&category=electronics
Authorization: Bearer <token>

Response 200:
{
"content": [
{
"id": 1,
"name": "Laptop Pro",
"description": "High-performance laptop",
"price": 999.99,
"stock": 50,
"category": {
"id": 1,
"name": "Electronics"
},
"imageUrl": "https://..."
}
],
"page": 0,
"size": 10,
"totalElements": 100,
"totalPages": 10
}

Carrinho​

POST /api/cart/items
Authorization: Bearer <token>
Content-Type: application/json

{
"productId": 1,
"quantity": 2
}

Response 200:
{
"items": [
{
"id": 1,
"product": { "id": 1, "name": "Laptop Pro", ... },
"quantity": 2,
"price": 999.99,
"subtotal": 1999.98
}
],
"totalItems": 2,
"totalAmount": 1999.98
}

Pedidos​

POST /api/orders
Authorization: Bearer <token>
Content-Type: application/json

{
"shippingAddress": "123 Main St, City, 12345"
}

Response 201:
{
"id": 1,
"status": "PENDING",
"items": [...],
"totalAmount": 1999.98,
"shippingAddress": "123 Main St, City, 12345",
"createdAt": "2024-01-15T10:30:00"
}

Testes Requeridos​

Testes Unitários​

  • ProductService: operações CRUD
  • CartService: adicionar, atualizar, remover itens
  • OrderService: criar pedido, validar estoque

Testes de Integração​

  • ProductController: todos os endpoints
  • CartController: operações do carrinho
  • OrderController: fluxo de pedidos

Pontos Bônus​

FuncionalidadePontos
Cache Redis nos produtos+5
Notificação por email (simulação)+3
Busca full-text+3
Exportar pedidos CSV+2
Docker Compose completo+5
Documentação Swagger+5

Estimativa de Tempo​

TarefaHoras
Setup do projeto e DB2
Entidades e repositórios4
Serviços de negócio6
Controllers REST4
Segurança JWT4
Testes6
Documentação2
Bônus4-8
Total28-36

Voltar ao Projeto Final