Fiz os testes para implementar a exclusão do arquivo de capa quando a série fosse excluída e o alocar uma imagem padrão nos casos em que o usuário não definir uma capa para a série cadastrada. Segue o código abaixo, demonstrando a solução. Teria alguma opção melhor para conclusão destes desafios?
SeriesControlles - store
public function store(SeriesFormRequest $request)
{
//Este if verifica se existe uma imagem inserida no input, se o retorno for positivo ele cria a série com a capa selecionada
//se for negativo ele utiliza o arquivo padrão "no_cover.gif" que fica armazenado na pasta storage/app/public/series_cover.
if($request->hasFile('cover')){
$coverPath = $request->file('cover')->store('series_cover', 'public');
$request->coverPath = $coverPath;
}else{
$request->coverPath = 'series_cover/no_cover.gif';
}
$serie = $this->repository->add($request);
SeriesCreatedEvent::dispatch(
$serie->nome,
$serie->id,
$request->seasonsQty,
$request->episodesPerSeason,
$request->coverPath,
);
return to_route('series.index')
->with('mensagem.sucesso', "Série '{$serie->nome}' adicionada com sucesso");
}
SeriesControlles - destroy
public function destroy(Series $series)
{
$series->delete();
SeriesDestroyed::dispatch(
$series->cover_path,
);
return to_route('series.index')
->with('mensagem.sucesso', "Série '{$series->nome}' removida com sucesso!");
}
Event - SeriesDestroyed
public function __construct(
public readonly string $cover_path,
)
{
}
Listener - DeleteCoverSeriesDestroyed
//a função handle recebe o cover_path da série a ser excluída e verifica, se o arquivo for diferente do padrão, que não possui capa,
//ele envia os dados para exclusão do arquivo.
public function handle(SeriesDestroyed $event)
{
if($event->cover_path != 'series_cover/no_cover.gif'){
Storage::disk('public')->delete([$event->cover_path]);
}
}
Também configurei as classes novas no EventServiceProvider, mas acho que não é necessário postar aqui. Como desafio pessoal, estou tentando descobrir como enviar a capa no e-mail que informa sobre a criação da série, mas até o momento não tive muito sucesso.
Obs.: Como sugestão, acho que seria interessante ter uma aula, ou somente a transcrição do código mostrando como seria a solução do desafio para os que não conseguiram, ou até mesmo para que os que conseguiram pudessem comparar as soluções.