Controle de concorrência em venda de ingressos
Como o Ticket Sales evita overselling com transações MySQL e histórico de status.
- Node.js
- MySQL
- Transações
- Concorrência
O desafio do Ticket Sales
Vender ingressos online é um problema clássico de concorrência: duas pessoas podem tentar comprar o último assento ao mesmo tempo.
No Ticket Sales, implementei reserva temporária, compra em lote e cancelamento com histórico completo de status.
Reserva com expiração
Ao reservar, o sistema bloqueia o ingresso por alguns minutos. Se o pagamento não confirmar, a reserva expira e o assento volta ao estoque disponível.
Transações no MySQL
A compra executa dentro de uma transação com SELECT ... FOR UPDATE na linha do ingresso, garantindo que apenas uma sessão consiga confirmar a venda.
START TRANSACTION;
SELECT available FROM tickets WHERE id = ? FOR UPDATE;
UPDATE tickets SET status = 'SOLD' WHERE id = ? AND available > 0;
INSERT INTO orders (...);
COMMIT;Histórico de status
Cada mudança — RESERVED, PAID, CANCELLED — é registrada em tabela de auditoria. Isso facilitou debug e testes com Vitest cobrindo cenários de corrida.
- Testes de concorrência com Vitest
- Swagger documentando fluxos de reserva e compra
- Deploy na Render com health check