option('days') ?? config('conversion.events.retention_days')); if ($days < 1) { $this->error('Aufbewahrungszeitraum muss mindestens einen Tag betragen.'); return self::FAILURE; } $cutoff = now()->subDays($days); $chunk = max(100, (int) $this->option('chunk')); $expired = ConversionEvent::query()->where('created_at', '<', $cutoff); if ($this->option('dry-run')) { $this->info(sprintf( '[Dry-Run] %d Ereignisse älter als %s.', (clone $expired)->count(), $cutoff->format('d.m.Y'), )); return self::SUCCESS; } $deleted = 0; while (true) { $removed = (clone $expired)->limit($chunk)->delete(); if ($removed === 0) { break; } $deleted += $removed; } $this->info(sprintf( 'Konversions-Ereignisse bereinigt: %d Einträge vor dem %s gelöscht (Aufbewahrung %d Tage).', $deleted, $cutoff->format('d.m.Y'), $days, )); return self::SUCCESS; } }