2
respostas

[Sugestão] Evento para a exclusão das covers

1: Crie um evento chamado SeriesDeleted(do que quiser). vc pode fazer isso executando ocomando no terminal:

php artisan make:event SeriesDeleted

dps add isso:

public Series $series;

    public function __construct(Series $series)
    {
        $this->series = $series;
    }

2: Crie um novo ouvinte pra ouvir o evento SeriesDeleted e remover a capa da série. Execute o comando pra criar o ouvinte:

php artisan make:listener DeleteSeriesCover --event=SeriesDeleted

dps add isso:

 public function handle(SeriesDeleted $event)
    {
    
        $coverPath = $event->series->cover;

        if ($coverPath && Storage::disk('public')->exists($coverPath)) {
            Storage::disk('public')->delete($coverPath);
        }
    }

depois add o evento :

SeriesDeleted::class => [
            DeleteSeriesCover::class,
        ],

e por ultimo add isso no destroy: SeriesDeleted::dispatch($series); -> dps do $series->delete();

2 respostas

Olá, Heber! Parece que você já está bem avançado e conseguiu criar um evento e um ouvinte para lidar com a exclusão das capas das séries quando a série é excluída. Isso é ótimo!

Sua sugestão é bastante válida e de fato ajuda a manter o sistema mais limpo e eficiente, evitando o acúmulo desnecessário de arquivos de imagens que não estão mais sendo usados.

Sua implementação parece correta e deve funcionar como esperado. Você criou o evento SeriesDeleted e definiu um ouvinte DeleteSeriesCover para lidar com esse evento. No ouvinte, você verifica se o arquivo de capa existe e, em caso afirmativo, o exclui. Isso é exatamente o que foi proposto no desafio.

Por fim, você adicionou o evento à lista de eventos e ouvintes no seu EventServiceProvider e disparou o evento após a série ser excluída no método destroy do seu SeriesController.

A única coisa que eu adicionaria à sua implementação é uma verificação para garantir que a série tem uma capa antes de tentar excluí-la. Isso pode evitar possíveis erros no caso de séries que não têm capa. Aqui está um exemplo de como você pode fazer isso:

public function handle(SeriesDeleted $event)
{
    if ($event->series->cover) {
        $coverPath = $event->series->cover;

        if (Storage::disk('public')->exists($coverPath)) {
            Storage::disk('public')->delete($coverPath);
        }
    }
}

Essa verificação adicional garante que o código dentro do bloco if só será executado se a série tiver uma capa, evitando assim possíveis erros.

Espero ter ajudado e bons estudos!

Opa, mto obg pela sugestão meu amigo :) eu achei q usando dessa forma if ($coverPath && Storage::disk('public')->exists($coverPath)) verificaria se a capa existe ou n, mas mto obg msm!