Simulador

Endpoints e Querys da API

Endpoints Principais (GET)

GET /produtos

SELECT
  p.id,
  c.nome AS categoria,
  p.nome,
  p.descricao,
  p.preco,
  p.disponivel,
  p.imagem_url
FROM produtos p
JOIN categorias c ON p.categoria_id = c.id
ORDER BY c.nome, p.nome;

GET /clientes

SELECT id, nome, telefone, email, endereco, data_cadastro
FROM clientes
ORDER BY nome;

GET /pedidos (com itens agregados)

SELECT
  p.id,
  p.data_pedido,
  COALESCE(c.nome, 'Cliente Balcão') AS cliente,
  p.tipo,
  p.status,
  p.total,
  STRING_AGG(pr.nome || ' (x' || ip.quantidade || ')', ', ') AS itens
FROM pedidos p
LEFT JOIN clientes c ON p.cliente_id = c.id
LEFT JOIN itens_pedido ip ON p.id = ip.pedido_id
LEFT JOIN produtos pr ON ip.produto_id = pr.id
GROUP BY p.id, c.nome
ORDER BY p.data_pedido DESC;

Endpoints de Consulta (GET - Acordeão)

Query SQL

SELECT
  p.id AS pedido_id,
  p.data_pedido,
  COALESCE(c.nome, 'Cliente Balcão') AS cliente,
  p.tipo,
  p.status,
  p.total
FROM pedidos p
LEFT JOIN clientes c ON p.cliente_id = c.id
ORDER BY p.data_pedido DESC;

Query SQL

SELECT
  p.id,
  p.data_pedido,
  p.status,
  p.total,
  STRING_AGG(pr.nome, ', ') AS itens
FROM pedidos p
LEFT JOIN itens_pedido ip ON p.id = ip.pedido_id
LEFT JOIN produtos pr ON ip.produto_id = pr.id
WHERE p.cliente_id = $1
GROUP BY p.id
ORDER BY p.data_pedido DESC;

Query SQL

SELECT
  p.id AS pedido_id,
  p.data_pedido,
  COALESCE(c.nome, 'Cliente Balcão') AS cliente_nome,
  p.tipo,
  p.status,
  p.observacao,
  p.total,
  STRING_AGG(pr.nome || ' (x' || ip.quantidade || ' - R$' || ip.preco_unitario || ')', ', ') AS itens
FROM pedidos p
LEFT JOIN clientes c ON p.cliente_id = c.id
LEFT JOIN itens_pedido ip ON p.id = ip.pedido_id
LEFT JOIN produtos pr ON ip.produto_id = pr.id
WHERE p.id = $1
GROUP BY p.id, c.nome;

Query SQL

SELECT
  pr.nome AS produto,
  ip.quantidade,
  ip.preco_unitario,
  (ip.quantidade * ip.preco_unitario) AS subtotal
FROM itens_pedido ip
JOIN produtos pr ON ip.produto_id = pr.id
WHERE ip.pedido_id = $1;

Query SQL

SELECT
  status,
  COUNT(*) AS quantidade,
  SUM(total) AS valor_total
FROM pedidos
GROUP BY status
ORDER BY
  CASE status
      WHEN 'pendente' THEN 1
      WHEN 'em_preparo' THEN 2
      WHEN 'pronto' THEN 3
      WHEN 'entregue' THEN 4
      WHEN 'cancelado' THEN 5
  END;

Query SQL

SELECT
  pr.nome,
  pr.imagem_url,
  SUM(ip.quantidade) AS quantidade_vendida,
  SUM(ip.quantidade * ip.preco_unitario) AS valor_total_vendido
FROM itens_pedido ip
JOIN produtos pr ON ip.produto_id = pr.id
GROUP BY pr.nome
ORDER BY quantidade_vendida DESC;

Query SQL

SELECT
  COUNT(*) AS total_pedidos,
  SUM(total) AS faturamento_dia
FROM pedidos
WHERE DATE(data_pedido) = CURRENT_DATE;

Query SQL

SELECT
  pr.nome,
  SUM(ip.quantidade) AS quantidade_vendida,
  SUM(ip.quantidade * ip.preco_unitario) AS valor_total
FROM itens_pedido ip
JOIN produtos pr ON ip.produto_id = pr.id
GROUP BY pr.nome
ORDER BY quantidade_vendida DESC
LIMIT 10;

Query SQL

SELECT
  p.id,
  c.nome AS categoria,
  p.nome,
  p.descricao,
  p.preco,
  p.disponivel,
  p.imagem_url
FROM produtos p
JOIN categorias c ON p.categoria_id = c.id
ORDER BY c.nome, p.nome;

Query SQL

SELECT
  id,
  nome,
  telefone,
  email,
  endereco,
  data_cadastro
FROM clientes
ORDER BY nome;

Endpoints de Escrita (POST/PATCH)

POST /clientes (Cadastrar Novo Cliente)

INSERT INTO clientes (nome, telefone, email, endereco)
VALUES ($1, $2, $3, $4)
RETURNING *;

POST /produtos (Cadastrar Novo Produto)

INSERT INTO produtos (categoria_id, nome, descricao, preco, disponivel)
VALUES ($1, $2, $3, $4, $5)
RETURNING *;

PATCH /pedidos/:id/status (Atualizar Status do Pedido)

UPDATE pedidos
SET status = $1
WHERE id = $2
RETURNING *;

Resultado

Clique em "Executar" para ver o resultado aqui.