dúvida Lumen v9

PerguntasCategoria: Laraveldúvida Lumen v9
Boa tarde pessoal
Queria uma sugestão de quem já fez isso.
Estou usando o Lumen v9
Alguém já fez um API que atualiza algum dado e envia pra outra api via JOB?
Eu recebo do SQS x payload contendo 3 campos
id, price, estoque
Dai eu preciso jogar isso em um job onde esse job vai consultar no banco trazer o dado atualizado e enviar pra outra api esses dados price e estoque
Eu teria que fazer toda essa lógica dentro do job não pode ser no controller pois não vou usar. Vai ser um serviço que fica aguardando receber pra agir. Como faria pra aplicar o verbo PATCH desses 2 dados? seria um em cada rota
$router->patch(‘endpoint/marketplace/catalogs/products/prices',
$response = Http::withHeaders([
‘X-First' => ‘foo',
‘X-Second' => ‘bar'
])->post(‘endpoint', $payload);
});
$router->patch(‘endpoint/marketplace/catalogs/products/stocks',
$response = Http::withHeaders([
‘X-First' => ‘foo',
‘X-Second' => ‘bar'
])->post(‘endpoint', $payload);
});
eu sei como compor isso exatamente. Seria nesse sentido mesmo?
2 Respostas

Suspeito que seja outra aplicação que adiciona a mensagem na fila SQS. Se for isso mesmo, vc precisa criar um worker customizado que consome essa fila. Quando uma nova mensagem chegar, vc converte o payload vindo da fila, instância o job que vc que executar passando o payload convertido, o resto é fluxo padrão do laravel/lumen.

Quanto ao envio para outra api, vc pode criar um service com a implementação para essa api e no job, depois de executar sua lógica, chama sua a implementação.

observando seu código o mais indicado seria criar um controller sim. Caso o trigger da execução seja externo ao servidor você deve fazer uma rota e chamar um controller, mas se você for o cara que irá chamar o consumo da fila então o melhor seria deixar em um command que possa ser chamado pelo worker, mas em ambos os casos recomendo deixar o processamento do contexto em um job.

PS: No caso de usar um controller eu faria uma única rota como: “endpoint/marketplace/catalogs/products/{context}” e no controller identificaria o contexto e iniciaria o job conforme demanda. Se precisar que o cara que chama a rota seja liberado na hora pode no controler retornar um http code 204 e chamar um evento que por sua ves estaria relacionado ao job que pode ou não ser processado no mesmo momento.

Espero ter ajudado. Abs.