ldc-groupe/app/Jobs/CleanTrashModels.php
2026-02-11 09:15:43 +01:00

47 lines
1.4 KiB
PHP

<?php
namespace App\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\File;
use Symfony\Component\Finder\SplFileInfo;
class CleanTrashModels implements ShouldQueue, ShouldBeUnique
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
/**
* Delete model if it has been deleted for more than 30 days.
*
* @return void
*/
public function handle(): void
{
$modelsPath = app_path('Models');
$dateLimit = Carbon::now()->subDays(30);
$models = collect(File::allFiles($modelsPath))
->map(fn(SplFileInfo $file) => 'App\\Models\\' . str_replace(
['/', '.php'],
['\\', ''],
$file->getRelativePathname()
))
->filter(fn(string $class) => method_exists($class, 'initializeSoftDeletes'))
->values()
->each(function (string $class) use ($dateLimit) {
$class::onlyTrashed()
->where('deleted_at', '<', $dateLimit)
->cursor()
->each(fn($model) => $model->forceDelete());
});
}
}