Projeto criado com o intuito de aprender como funciona o trabalho com queues em laravel. Em adição, também farei o uso do storage local para salvar fotos.
- Criando link simbólico para que seja possível acessar as fotos pela public/
php artisan storage:link
- Salvando imagens aleatórias para fim de testes
$fileManager = new App\Models\FileManager(size: 400);
$fileManager->saveRandomPhoto();
- No arquivo
.env
mude o valor de QUEUE_CONNECTION paradatabase
- Executar
php artisan queue:work
para as filas começarem a trabalhar
Rota: /save-photo/{size}
Essa rota cairá no Controller FileManager
, que por sua vez faz o dispatch do job RandomImage
com o delay de 5 segundos
public function savePhoto(Request $request)
{
RandomImage::dispatch($request->size)->delay(now()->addSecond(5));
}
RandomImage
chamará o método saveRandomPhoto
da model FileManager
passando o size informado na requisição
public function handle(FileManager $fileManager)
{
$fileManager->saveRandomPhoto($this->size);
}
O método saveRandomPhoto
tem como objetivo consumir uma API de geração de fotos aleatórias e salvar a resposta (a imagem) no storage local, na pasta /public
public function saveRandomPhoto(int $size)
{
$response = $this->client->request('GET', "/{$size}");
Storage::disk('public')->put(uniqid() . '.jpg', $response->getBody());
}
- Observação: a propriedade
client
foi configurada para receber umGuzzleHttp\Client
já com abase_uri
configurada por meio doAppServiceProvider
$this->app->when(FileManager::class)
->needs(Client::class)
->give(function () {
return new Client([
'base_uri' => 'https://picsum.photos'
]);
});