Modernização da criação de pedidos (Orders)
TLDR: introduzir a entidade
Orderpara permitir um pagamento que abranja mais de um checkout, criado de forma assíncrona, com endpoints separados por forma de pagamento.
Contexto
A criação de pagamentos é acoplada a um único checkout e é síncrona. Precisamos de uma estrutura mais moderna, que permita pedidos com múltiplos checkouts e que não bloqueie o request enquanto conversa com o gateway.
Objetivos
- O controller de criação de order captura todas as informações do usuário — quais produtos quer comprar e como quer pagar. Um job é disparado para criar o pagamento no gateway, e essa informação fica disponível nos detalhes do pedido.
- O endpoint
orders/:id(details) retorna a informação do pagamento, possivelmente apenas o ID. - PIX: endpoint
orders/:order_id/payments/:id/pix, que bate no gateway apenas uma vez e depois retorna. - Boleto: endpoint
orders/:order_id/payments/:id/boleto, que bate no gateway apenas uma vez e depois retorna. - Cartão de crédito:
POST orders/:order_id/payments/:id/credit_cards, que bate no gateway ao tentar pagar. - Registrar audit em tudo que for feito.
Fora de escopo
— (não registrado na spec original)
Mudanças
Modelo Order
has_many :checkoutshas_many :payments
| Campo | Nome |
|---|---|
pid |
ID do Order |
user_id |
ID do comprador |
checkout_id |
ID do checkout principal |
affiliate_id |
ID do afiliado |
Controller e API
Não definido na spec original.
Como verificar
— (não registrado na spec original)
Documentação
Não implementado. Não existe app/models/order.rb nem rotas de orders no config/routes.rb. O fluxo assíncrono de criação de pagamento que existe hoje (Payments::Creation::CreateFlow + ScheduleWithGatewayJob, descrito em ../reference/payments/payment_flow.md) resolve parte da motivação original — a assincronia —, mas continua atrelado a um único checkout.