Pular para o conteúdo principal
Versão: 1.0

Fluxo de compra (ponta a ponta)

O caminho feliz de uma compra tem 5 passos. A unidade que entra no carrinho é sempre a variante (não o produto).

Passo a passo​

compra.js
const BASE = 'http://localhost:3333/v1';
const headers = { 'X-API-Key': API_KEY, 'X-Student-RM': 'RM550001', 'Content-Type': 'application/json' };

// 1) Catálogo → detalhe traz as VARIANTES
const { data } = await fetch(`${BASE}/products`, { headers }).then((r) => r.json());
const produto = await fetch(`${BASE}/products/${data[0].id}`, { headers }).then((r) => r.json());
const variante = produto.variants[0]; // a unidade vendável

// 2) Cliente loga e guarda o token
const { token } = await fetch(`${BASE}/auth/login`, {
method: 'POST', headers,
body: JSON.stringify({ email: 'maria@x.com', password: '123456' }),
}).then((r) => r.json());
const auth = { ...headers, Authorization: `Bearer ${token}` };

// 3) Carrinho (por VARIANTE)
await fetch(`${BASE}/cart/items`, {
method: 'POST', headers: auth,
body: JSON.stringify({ variantId: variante.id, quantity: 2 }),
});

// 4) Checkout → cria o pedido PENDING e reserva o estoque
const pedido = await fetch(`${BASE}/orders/checkout`, { method: 'POST', headers: auth }).then((r) => r.json());

// 5) Pagar → PAID e baixa o estoque
await fetch(`${BASE}/orders/${pedido.id}/pay`, {
method: 'POST', headers: auth,
body: JSON.stringify({ method: 'PIX' }),
});

Pagamento: dois jeitos​

Paga e confirma na hora — bom para prototipar rápido.

POST /orders/:id/pay { "method": "PIX" } // aprova (padrão)
POST /orders/:id/pay { "method": "CREDIT_CARD", "simulate": "decline" } // força recusa
Estoque e recusa

O checkout reserva o estoque (pedido PENDING). O pagamento aprovado baixa a reserva (PAID). Pagamento recusado não baixa estoque. Cancelar um pedido pendente libera a reserva.

Sandbox = tudo fake

Tudo em /sandbox/* é simulado (rotulado no Swagger). Nenhum dado real de cartão é aceito — nunca coloque número de cartão verdadeiro.