option('all-failed')) { return $this->reindexAllFailed(); } if ($versionId = $this->option('version_id')) { return $this->reindexVersion((int) $versionId); } if ($documentId = $this->option('document_id')) { return $this->reindexDocument((int) $documentId); } $this->error('Sila nyatakan --document_id, --version_id, atau --all-failed'); return self::FAILURE; } private function reindexDocument(int $documentId): int { $document = Document::find($documentId); if (!$document) { $this->error("Dokumen ID {$documentId} tidak dijumpai."); return self::FAILURE; } $currentVersion = $document->currentVersion; if (!$currentVersion) { $this->error("Dokumen '{$document->title}' tiada versi semasa."); return self::FAILURE; } ReindexDocumentJob::dispatch($currentVersion->id); $this->info("✓ Reindex dijadualkan untuk dokumen: {$document->title} (v{$currentVersion->version_number})"); return self::SUCCESS; } private function reindexVersion(int $versionId): int { $version = DocumentVersion::with('document')->find($versionId); if (!$version) { $this->error("Version ID {$versionId} tidak dijumpai."); return self::FAILURE; } ReindexDocumentJob::dispatch($version->id); $this->info("✓ Reindex dijadualkan untuk: {$version->document->title} v{$version->version_number}"); return self::SUCCESS; } private function reindexAllFailed(): int { $failedVersions = DocumentVersion::whereIn('processing_status', [ DocumentVersion::STATUS_FAILED, DocumentVersion::STATUS_EXTRACTION_FAILED, ])->with('document')->get(); if ($failedVersions->isEmpty()) { $this->info('Tiada versi yang gagal ditemui.'); return self::SUCCESS; } $count = 0; foreach ($failedVersions as $version) { ReindexDocumentJob::dispatch($version->id); $this->line(" → {$version->document->title} v{$version->version_number}"); $count++; } $this->info("✓ {$count} versi telah dijadualkan untuk reindex."); return self::SUCCESS; } }