Teren-app/app/Console/Commands/RunArchive.php
2025-10-05 19:45:49 +02:00

58 lines
1.8 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Models\ArchiveSetting;
use App\Services\Archiving\ArchiveExecutor;
use Illuminate\Console\Command;
class RunArchive extends Command
{
protected $signature = 'archive:run {--setting=* : Specific archive_setting IDs to run}';
protected $description = 'Execute archive operations based on configured archive settings';
public function handle(): int
{
$ids = collect($this->option('setting'))
->filter()
->map(fn ($v) => (int) $v)
->filter();
$query = ArchiveSetting::query()
->where('enabled', true)
// Manual strategies are never auto-run via the job
->where('strategy', '!=', 'manual');
if ($ids->isNotEmpty()) {
$query->whereIn('id', $ids);
}
$settings = $query->get();
if ($settings->isEmpty()) {
$this->info('No enabled archive settings found.');
return self::SUCCESS;
}
$executor = app(ArchiveExecutor::class);
$overall = [];
foreach ($settings as $setting) {
$this->line("Processing setting #{$setting->id} (".($setting->name ?? 'unnamed').')');
$res = $executor->executeSetting($setting);
foreach ($res as $table => $count) {
$overall[$table] = ($overall[$table] ?? 0) + $count;
$this->line(" - {$table}: {$count} affected");
}
}
$this->info('Archive run complete.');
if (empty($overall)) {
$this->info('No rows matched any archive setting.');
} else {
$this->table(['Table', 'Affected'], collect($overall)->map(fn ($c, $t) => [$t, $c])->values()->all());
}
return self::SUCCESS;
}
}