withoutGlobalScope(PortalScope::class)->withTrashed()->whereNotNull('archive_pending_at')->orderBy('id'); $pending = $query->count(); if ($this->option('dry-run')) { $this->info("Offen (Trockenlauf): {$pending} Meldungen mit ausstehender Archivierung."); return self::SUCCESS; } $recorded = 0; $failed = 0; $query->chunkById(100, function ($pressReleases) use ($retry, &$recorded, &$failed): void { foreach ($pressReleases as $pressRelease) { $result = $retry->retry($pressRelease); $recorded += $result['recorded']; $failed += $result['failed']; } }); $remaining = PressRelease::query()->withoutGlobalScope(PortalScope::class)->withTrashed()->whereNotNull('archive_pending_at')->count(); $this->info(sprintf('Nachgeholt: %d Archiveinträge für %d Meldungen; fehlgeschlagen: %d; weiterhin offen: %d.', $recorded, $pending, $failed, $remaining)); return $failed > 0 || $remaining > 0 ? self::FAILURE : self::SUCCESS; } }