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.