UpdatePix assíncrono

TLDR: Move o Payments::UpdatePix da chamada síncrona em Orders#show para 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 chama Payments::UpdatePix.call(order:)
  • app/controllers/api/v1/orders_controller.rb: substituir Payments::UpdatePix.call(order:) por Payments::UpdatePixJob.perform_later(ucase.order)

Como verificar

  • Request para GET /api/v1/orders/:id retorna a resposta sem aguardar o Zeuspay
  • GoodJob processa o Payments::UpdatePixJob e o campo pix do payment é atualizado
  • Testes unitários do job e do controller passam

Documentação

Nenhuma mudança de documentação necessária.