*/ private const EXPECTED_INDEXES = [ 'activity_logs' => ['idx_activity_logs_description_key'], 'users' => ['idx_users_created_at'], 'mail_send_logs' => ['idx_mail_send_logs_status'], 'template_layouts' => ['idx_template_layouts_template_id'], 'schedules' => ['idx_schedules_created_at'], ]; /** * 업그레이드 스텝을 실행합니다. * * @param UpgradeContext $context 업그레이드 컨텍스트 */ public function run(UpgradeContext $context): void { $totalExpected = 0; $totalFound = 0; foreach (self::EXPECTED_INDEXES as $table => $indexes) { if (! Schema::hasTable($table)) { $context->logger->warning("[alpha.19] {$table} 테이블이 존재하지 않습니다."); continue; } $existingIndexes = collect(Schema::getIndexes($table))->pluck('name')->toArray(); foreach ($indexes as $indexName) { $totalExpected++; if (in_array($indexName, $existingIndexes)) { $totalFound++; } else { $context->logger->warning("[alpha.19] {$table} 테이블에 {$indexName} 인덱스가 없습니다. 마이그레이션을 실행하세요."); } } } $context->logger->info("[alpha.19] 코어 인덱스 검증 완료: {$totalFound}/{$totalExpected}개 확인됨"); } }