option('days'); if ($days < 1) { $this->error('--days must be at least 1.'); return self::FAILURE; } $cutoff = now()->subDays($days); $logs = ExportLog::query() ->whereNull('purged_at') ->where('created_at', '<', $cutoff) ->get(); if ($logs->isEmpty()) { $this->info("No export files eligible for purge (older than {$days} days)."); return self::SUCCESS; } $purged = 0; $missing = 0; foreach ($logs as $log) { $disk = $log->disk ?? 'local'; $path = $log->path; if ($path && Storage::disk($disk)->exists($path)) { Storage::disk($disk)->delete($path); $purged++; } else { $missing++; } $log->forceFill(['purged_at' => now()])->save(); activity('exports') ->performedOn($log) ->withProperties([ 'report_type' => $log->report_type, 'path' => $path, 'retention_days' => $days, ]) ->log('export_file_purged'); } $this->info("Purged {$purged} export file(s). {$missing} record(s) had no file on disk."); return self::SUCCESS; } }