set('pdo.dev', fn () => DatabaseFactory::dev()); // ki_content database connection $container->set('pdo.content', fn () => DatabaseFactory::content()); // ========================================================================= // REPOSITORIES - ki_dev database // ========================================================================= $container->set(DokumentExplorerRepository::class, fn (Container $c) => new DokumentExplorerRepository($c->get('pdo.dev'))); $container->set(SeiteExplorerRepository::class, fn (Container $c) => new SeiteExplorerRepository($c->get('pdo.dev'))); $container->set(ChunkExplorerRepository::class, fn (Container $c) => new ChunkExplorerRepository($c->get('pdo.dev'))); $container->set(DokumentationRepository::class, fn (Container $c) => new DokumentationRepository($c->get('pdo.dev'))); $container->set(FileBackupRepository::class, fn (Container $c) => new FileBackupRepository($c->get('pdo.dev'))); $container->set(ContractRepository::class, fn (Container $c) => new ContractRepository($c->get('pdo.dev'))); $container->set(TaskRepository::class, fn (Container $c) => new TaskRepository($c->get('pdo.dev'))); $container->set(TaskAssignmentRepository::class, fn (Container $c) => new TaskAssignmentRepository($c->get('pdo.dev'))); $container->set(TaskResultRepository::class, fn (Container $c) => new TaskResultRepository($c->get('pdo.dev'))); $container->set(TaskCommentRepository::class, fn (Container $c) => new TaskCommentRepository($c->get('pdo.dev'))); $container->set(KiProtokollRepository::class, fn (Container $c) => new KiProtokollRepository($c->get('pdo.dev'))); $container->set(CollectionRepository::class, fn (Container $c) => new CollectionRepository($c->get('pdo.dev'), $c->get('pdo.content'))); $container->set(FileAnalysisRepository::class, fn (Container $c) => new FileAnalysisRepository($c->get('pdo.dev'))); $container->set(DependencyGraphRepository::class, fn (Container $c) => new DependencyGraphRepository($c->get('pdo.dev'))); $container->set(CodeQualityRepository::class, fn (Container $c) => new CodeQualityRepository($c->get('pdo.dev'))); // ========================================================================= // REPOSITORIES - ki_content database // ========================================================================= $container->set(PipelineRepository::class, fn (Container $c) => new PipelineRepository($c->get('pdo.content'))); $container->set(ContentRepository::class, fn (Container $c) => new ContentRepository($c->get('pdo.content'))); $container->set(TaxonomyRepository::class, fn (Container $c) => new TaxonomyRepository($c->get('pdo.content'))); $container->set(OntologyRepository::class, fn (Container $c) => new OntologyRepository($c->get('pdo.content'))); $container->set(DocumentRepository::class, fn (Container $c) => new DocumentRepository($c->get('pdo.content'))); $container->set(ChunkRepository::class, fn (Container $c) => new ChunkRepository($c->get('pdo.content'))); $container->set(RelationRepository::class, fn (Container $c) => new RelationRepository($c->get('pdo.content'))); $container->set(EntityRepository::class, fn (Container $c) => new EntityRepository($c->get('pdo.content'))); $container->set(SemanticSearchRepository::class, fn (Container $c) => new SemanticSearchRepository($c->get('pdo.content'))); $container->set(ChatSessionRepository::class, fn (Container $c) => new ChatSessionRepository($c->get('pdo.content'))); $container->set(ChatMessageRepository::class, fn (Container $c) => new ChatMessageRepository($c->get('pdo.content'))); $container->set(PromptsRepository::class, fn (Container $c) => new PromptsRepository($c->get('pdo.content'))); $container->set(CriticsRepository::class, fn (Container $c) => new CriticsRepository($c->get('pdo.content'))); $container->set(ContentConfigRepository::class, fn (Container $c) => new ContentConfigRepository($c->get('pdo.content'))); // ========================================================================= // INTERFACE ALIASES (Domain → Infrastructure) // ========================================================================= $container->set(TaskRepositoryInterface::class, fn (Container $c) => $c->get(TaskRepository::class)); $container->set(ChatSessionRepositoryInterface::class, fn (Container $c) => $c->get(ChatSessionRepository::class)); $container->set(ChatMessageRepositoryInterface::class, fn (Container $c) => $c->get(ChatMessageRepository::class)); $container->set(CollectionRepositoryInterface::class, fn (Container $c) => $c->get(CollectionRepository::class)); $container->set(PipelineRepositoryInterface::class, fn (Container $c) => $c->get(PipelineRepository::class)); $container->set(ContentRepositoryInterface::class, fn (Container $c) => $c->get(ContentRepository::class)); $container->set(DokumentationRepositoryInterface::class, fn (Container $c) => $c->get(DokumentationRepository::class)); $container->set(TaxonomyRepositoryInterface::class, fn (Container $c) => $c->get(TaxonomyRepository::class)); $container->set(OntologyRepositoryInterface::class, fn (Container $c) => $c->get(OntologyRepository::class)); $container->set(DocumentRepositoryInterface::class, fn (Container $c) => $c->get(DocumentRepository::class)); $container->set(ChunkRepositoryInterface::class, fn (Container $c) => $c->get(ChunkRepository::class)); $container->set(RelationRepositoryInterface::class, fn (Container $c) => $c->get(RelationRepository::class)); $container->set(EntityRepositoryInterface::class, fn (Container $c) => $c->get(EntityRepository::class)); $container->set(SemanticSearchRepositoryInterface::class, fn (Container $c) => $c->get(SemanticSearchRepository::class)); $container->set(DokumentExplorerRepositoryInterface::class, fn (Container $c) => $c->get(DokumentExplorerRepository::class)); $container->set(SeiteExplorerRepositoryInterface::class, fn (Container $c) => $c->get(SeiteExplorerRepository::class)); $container->set(ChunkExplorerRepositoryInterface::class, fn (Container $c) => $c->get(ChunkExplorerRepository::class)); $container->set(FileAnalysisRepositoryInterface::class, fn (Container $c) => $c->get(FileAnalysisRepository::class)); $container->set(DependencyGraphRepositoryInterface::class, fn (Container $c) => $c->get(DependencyGraphRepository::class)); $container->set(CodeQualityRepositoryInterface::class, fn (Container $c) => $c->get(CodeQualityRepository::class)); $container->set(TaskResultRepositoryInterface::class, fn (Container $c) => $c->get(TaskResultRepository::class)); $container->set(TaskAssignmentRepositoryInterface::class, fn (Container $c) => $c->get(TaskAssignmentRepository::class)); $container->set(TaskCommentRepositoryInterface::class, fn (Container $c) => $c->get(TaskCommentRepository::class)); $container->set(FileBackupRepositoryInterface::class, fn (Container $c) => $c->get(FileBackupRepository::class)); $container->set(KiProtokollRepositoryInterface::class, fn (Container $c) => $c->get(KiProtokollRepository::class)); $container->set(PromptsRepositoryInterface::class, fn (Container $c) => $c->get(PromptsRepository::class)); $container->set(ContractRepositoryInterface::class, fn (Container $c) => $c->get(ContractRepository::class)); // ========================================================================= // CODE ANALYSIS SERVICES // ========================================================================= $container->set(PhpFileParser::class, fn () => new PhpFileParser()); $container->set(PythonFileParser::class, fn () => new PythonFileParser()); $container->set(JsFileParser::class, fn () => new JsFileParser()); $container->set(CodeQualityChecker::class, fn () => new CodeQualityChecker()); $container->set(CodeScanner::class, function (Container $c) { return new CodeScanner( $c->get(FileAnalysisRepositoryInterface::class), $c->get(CodeQualityRepositoryInterface::class), $c->get(PhpFileParser::class), $c->get(PythonFileParser::class), $c->get(JsFileParser::class), $c->get(CodeQualityChecker::class) ); }); $container->set(CodeScannerInterface::class, fn (Container $c) => $c->get(CodeScanner::class)); // ========================================================================= // AI SERVICES // ========================================================================= $container->set(AIConfig::class, fn () => AIConfig::fromCredentialsFile()); $container->set(ChatService::class, function (Container $c) { return $c->get(AIConfig::class)->createChatService(); }); $container->set(OllamaService::class, function (Container $c) { return $c->get(AIConfig::class)->createOllamaService(); }); $container->set(QdrantService::class, function (Container $c) { return $c->get(AIConfig::class)->createQdrantService(); }); $container->set(VectorSearchService::class, fn () => new VectorSearchService()); $container->set(ContentQualityValidator::class, function (Container $c) { return new ContentQualityValidator($c->get(OllamaService::class)); }); $container->set(ModelRegistry::class, function (Container $c) { $registry = new ModelRegistry($c->get('pdo.dev')); ModelRegistry::setInstance($registry); return $registry; }); // ========================================================================= // APPLICATION SERVICES // ========================================================================= $container->set(AuditLogger::class, fn (Container $c) => new AuditLogger($c->get('pdo.dev'))); $container->set(Infrastructure\Audit\AuditService::class, function (Container $c) { return new Infrastructure\Audit\AuditService($c->get('pdo.dev')); }); $container->set(QdrantClient::class, fn () => new QdrantClient()); $container->set(ChunkSearchService::class, function (Container $c) { return new ChunkSearchService( $c->get(QdrantClient::class), $c->get(OllamaService::class) ); }); $container->set(ChunkSyncService::class, function (Container $c) { return new ChunkSyncService( $c->get('pdo.dev'), $c->get(OllamaService::class), $c->get(QdrantClient::class) ); }); $container->set(HybridSearchService::class, function (Container $c) { return new HybridSearchService( $c->get('pdo.dev'), $c->get(OllamaService::class) ); }); $container->set(ChunkAnalysisService::class, function (Container $c) { return new ChunkAnalysisService( $c->get('pdo.dev'), $c->get(OllamaService::class) ); }); $container->set(ChunkingService::class, function (Container $c) { return new ChunkingService( $c->get('pdo.dev'), $c->get(DokumentationRepository::class) ); }); $container->set(CollectionValidator::class, function (Container $c) { return new CollectionValidator($c->get(CollectionRepository::class)); }); $container->set(ContentCollectionService::class, function (Container $c) { return new ContentCollectionService( $c->get(CollectionRepository::class), $c->get(CollectionValidator::class) ); }); $container->set(PipelineStepService::class, function (Container $c) { return new PipelineStepService($c->get(PipelineRepository::class)); }); // ========================================================================= // FORMATTERS // ========================================================================= $container->set(ApiResponseFormatter::class, fn () => new ApiResponseFormatter()); $container->set(ChatMessageFormatter::class, fn () => new ChatMessageFormatter()); // ========================================================================= // USE CASES - Explicit registrations for PDO dependencies // ========================================================================= // UseCases that need specific PDO connections must be registered explicitly. // Other UseCases are resolved via Container::autowire() automatically. $container->set(\UseCases\Chat\ManageChatSessionsUseCase::class, function (Container $c) { return new \UseCases\Chat\ManageChatSessionsUseCase( $c->get(ChatSessionRepositoryInterface::class), $c->get(ChatMessageRepositoryInterface::class), $c->get(ContentConfigRepository::class), $c->get(CollectionRepositoryInterface::class), $c->get(CollectionValidator::class), $c->get('pdo.dev') ); }); };