UpdatePix assíncrono
TLDR: Move o
Payments::UpdatePixda chamada síncrona emOrders#showpara um background job, tirando a latência do Zeuspay do ciclo do request.
Contexto
Orders#show chama Payments::UpdatePix.call(order:) de forma síncrona antes de renderizar a resposta. Esse use case faz uma chamada HTTP ao Zeuspay para buscar o hash PIX. Se o Zeuspay estiver lento, o request trava a thread do Puma até o timeout. O GoodJob já está configurado no projeto — a correção é enfileirar um job que executa o UpdatePix em background, com o endpoint respondendo imediatamente.
Objetivos
- Remover a chamada síncrona ao Zeuspay do ciclo do request em
Orders#show - Manter a atualização do PIX funcionando via background job
Fora de escopo
— (não registrado na spec original)
Mudanças
app/jobs/payments/update_pix_job.rb: novo job que chamaPayments::UpdatePix.call(order:)app/controllers/api/v1/orders_controller.rb: substituirPayments::UpdatePix.call(order:)porPayments::UpdatePixJob.perform_later(ucase.order)
Como verificar
- Request para
GET /api/v1/orders/:idretorna a resposta sem aguardar o Zeuspay - GoodJob processa o
Payments::UpdatePixJobe o campopixdo payment é atualizado - Testes unitários do job e do controller passam
Documentação
Nenhuma mudança de documentação necessária.