Transações no banco: quando duas operações precisam acontecer juntas
O pedido foi criado, mas o estoque não baixou. O pagamento foi registrado, mas o pedido ficou pendente. Transações evitam esses estados pela metade.
Por Equipe We Codex3 min de leitura
Muitas operações de negócio envolvem várias gravações: criar o pedido, baixar o estoque, registrar o pagamento. Se o sistema falhar no meio, os dados ficam inconsistentes — e alguém vai precisar descobrir e corrigir manualmente.
O que uma transação garante
Que um conjunto de operações acontece por inteiro ou não acontece. Se qualquer passo falhar, tudo é desfeito.
await db.$transaction(async (tx) => {
const pedido = await tx.pedido.create({ data: novoPedido })
await tx.estoque.update({ where: { produtoId }, data: { quantidade: { decrement: qtd } } })
await tx.movimento.create({ data: { pedidoId: pedido.id, tipo: 'SAIDA', qtd } })
})Concorrência
Duas pessoas comprando o último item ao mesmo tempo: sem cuidado, ambas conseguem. Restrições no banco (estoque não pode ser negativo), bloqueios de linha ou verificações atômicas resolvem.
O que não colocar dentro da transação
- Chamadas a serviços externos (pagamento, e-mail, APIs): são lentas e não podem ser desfeitas pelo banco. Faça antes ou depois, com filas e idempotência (Filas e jobs em background: tirando tarefas pesadas da requisição, Idempotência: como evitar cobrança duplicada e pedidos repetidos).
- Processamento demorado: transações longas travam outras operações.
Entre sistemas diferentes
Quando a operação envolve dois sistemas (seu banco e o ERP), não há transação única. Usa-se compensação: se o segundo passo falha, o primeiro é desfeito por uma ação contrária (Integrando seu sistema com o ERP: as armadilhas mais comuns).
A escolha do banco influencia o suporte a transações (PostgreSQL ou MongoDB: como escolher sem modismo).
A We Codex constrói sistemas consistentes em sistemas web e e-commerces. Fale com a gente.
- Banco de dados
- Transações
- Consistência
- Backend
Resolver de vez, com quem faz isso todo dia
Precisa de uma API ou integração que não caia quando o negócio crescer?
Este artigo mostra o caminho. A implementação sob medida — o detalhe que muda o resultado no seu caso — é o trabalho da We Codex, empresa de engenharia do grupo Wocom.
Continue lendo
Tudo sobre Backend & APIs- Ler artigo
Backend & APIs3 min
PostgreSQL ou MongoDB: como escolher sem modismo
Relacional ou documentos? A escolha do banco afeta o sistema por anos. Critérios práticos para decidir pelo problema, não pela moda.
- Ler artigo
Backend & APIs3 min
Idempotência: como evitar cobrança duplicada e pedidos repetidos
O cliente clicou duas vezes em "pagar" e foi cobrado duas vezes. Idempotência é a técnica que impede isso — e todo sistema com pagamentos precisa dela.
- Ler artigo
Backend & APIs3 min
Integrando seu sistema com o ERP: as armadilhas mais comuns
Integrar o sistema novo com o ERP parece uma tarefa de dias e vira meses. As armadilhas mais comuns — e como planejar para não cair nelas.