47 lines
1.8 KiB
PHP
47 lines
1.8 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Services\Commands;
|
|
|
|
use App\Models\Storage as StorageModel;
|
|
use App\ServiceResults\ServiceResultError;
|
|
use App\ServiceResults\ServiceResultSuccess;
|
|
use App\Services\Service;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Storage as StorageSupport;
|
|
|
|
final class DeleteOldFilesService extends Service
|
|
{
|
|
/**
|
|
* $temporaryBeforeDate = date of deletion of temporary files
|
|
* $deletedBeforeDate = date of deletion files that were marked as deleted
|
|
*
|
|
* @param Carbon $temporaryBeforeDate
|
|
* @param Carbon $deletedBeforeDate
|
|
* @return ServiceResultError|ServiceResultSuccess
|
|
*/
|
|
public function fromStorage(Carbon $temporaryBeforeDate, Carbon $deletedBeforeDate): ServiceResultError|ServiceResultSuccess
|
|
{
|
|
$disk = config('storage.disk');
|
|
|
|
StorageModel::withTrashed()
|
|
->where(function (Builder $query) use($temporaryBeforeDate) {
|
|
$query->whereNull('morph_id')->where('updated_at', '<', $temporaryBeforeDate);
|
|
})->orWhere(function (Builder $query) use($deletedBeforeDate) {
|
|
$query->whereNotNull('deleted_at')->where('deleted_at', '<', $deletedBeforeDate);
|
|
})->chunkById(100, function ($items) use($disk) {
|
|
$deleteIds = [];
|
|
foreach ($items as $item) {
|
|
$deleteIds[] = $item->id;
|
|
|
|
if (StorageSupport::disk($disk)->exists($item->file)) {
|
|
StorageSupport::disk($disk)->delete($item->file);
|
|
}
|
|
}
|
|
StorageModel::withTrashed()->whereIn('id', $deleteIds)->forceDelete();
|
|
});
|
|
|
|
return $this->ok(__('Old Files deleted.'));
|
|
}
|
|
}
|