2025-09-19 16:20:48 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Jobs;
|
|
|
|
|
|
2025-09-23 13:09:18 +02:00
|
|
|
use Carbon\Carbon;
|
2025-09-19 16:20:48 +02:00
|
|
|
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;
|
2025-10-01 09:47:27 +02:00
|
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
|
use Symfony\Component\Finder\SplFileInfo;
|
2025-09-19 16:20:48 +02:00
|
|
|
|
|
|
|
|
class CleanTrashModels implements ShouldQueue, ShouldBeUnique
|
|
|
|
|
{
|
|
|
|
|
use Dispatchable;
|
|
|
|
|
use InteractsWithQueue;
|
|
|
|
|
use Queueable;
|
|
|
|
|
use SerializesModels;
|
|
|
|
|
|
|
|
|
|
/**
|
2025-10-01 09:47:27 +02:00
|
|
|
* Delete model if it has been deleted for more than 30 days.
|
2025-09-19 16:20:48 +02:00
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function handle(): void
|
|
|
|
|
{
|
2025-10-01 09:47:27 +02:00
|
|
|
$modelsPath = app_path('Models');
|
|
|
|
|
$dateLimit = Carbon::now()->subDays(30);
|
|
|
|
|
|
2025-11-12 14:32:50 +01:00
|
|
|
$models = collect(File::allFiles($modelsPath))
|
2025-10-01 09:47:27 +02:00
|
|
|
->map(fn(SplFileInfo $file) => 'App\\Models\\' . str_replace(
|
|
|
|
|
['/', '.php'],
|
|
|
|
|
['\\', ''],
|
|
|
|
|
$file->getRelativePathname()
|
|
|
|
|
))
|
2025-11-12 14:32:50 +01:00
|
|
|
->filter(fn(string $class) => method_exists($class, 'initializeSoftDeletes'))
|
2025-10-01 09:47:27 +02:00
|
|
|
->values()
|
|
|
|
|
->each(function (string $class) use ($dateLimit) {
|
|
|
|
|
$class::onlyTrashed()
|
|
|
|
|
->where('deleted_at', '<', $dateLimit)
|
|
|
|
|
->cursor()
|
|
|
|
|
->each(fn($model) => $model->forceDelete());
|
2025-09-23 13:09:18 +02:00
|
|
|
});
|
2025-09-19 16:20:48 +02:00
|
|
|
}
|
|
|
|
|
}
|