{
"event": "PostToolUse",
"tool_name": "Read",
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Controller\/SemanticExplorerController.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Controller;\n\n\/\/ @responsibility: HTTP-Endpunkte für Semantic Explorer (Nutzdaten, Vektor-Suche)\n\nuse Domain\\Repository\\ChunkRepositoryInterface;\nuse Domain\\Repository\\DocumentRepositoryInterface;\nuse Domain\\Repository\\EntityRepositoryInterface;\nuse Domain\\Repository\\RelationRepositoryInterface;\nuse Domain\\Repository\\SemanticSearchRepositoryInterface;\nuse Framework\\Controller;\nuse Infrastructure\\AI\\VectorSearchService;\n\nclass SemanticExplorerController extends Controller\n{\n private DocumentRepositoryInterface $documentRepository;\n private ChunkRepositoryInterface $chunkRepository;\n private EntityRepositoryInterface $entityRepository;\n private RelationRepositoryInterface $relationRepository;\n private SemanticSearchRepositoryInterface $semanticSearchRepository;\n private VectorSearchService $vectorSearchService;\n\n public function __construct(\n DocumentRepositoryInterface $documentRepository,\n ChunkRepositoryInterface $chunkRepository,\n EntityRepositoryInterface $entityRepository,\n RelationRepositoryInterface $relationRepository,\n SemanticSearchRepositoryInterface $semanticSearchRepository,\n VectorSearchService $vectorSearchService\n ) {\n $this->documentRepository = $documentRepository;\n $this->chunkRepository = $chunkRepository;\n $this->entityRepository = $entityRepository;\n $this->relationRepository = $relationRepository;\n $this->semanticSearchRepository = $semanticSearchRepository;\n $this->vectorSearchService = $vectorSearchService;\n }\n\n \/**\n * GET \/semantic-explorer\n * Dashboard mit Statistiken\n *\/\n public function index(): void\n {\n $docStats = $this->documentRepository->getStats();\n $chunkStats = $this->chunkRepository->getStats();\n $semanticStats = $this->semanticSearchRepository->getSemanticStats();\n $documents = $this->documentRepository->findAll();\n $recentChunks = $this->chunkRepository->findRecent(5);\n\n $this->view('semantic-explorer.index', [\n 'title' => 'Semantic Explorer',\n 'docStats' => $docStats,\n 'chunkStats' => $chunkStats,\n 'semanticStats' => $semanticStats,\n 'documents' => $documents,\n 'recentChunks' => $recentChunks,\n ]);\n }\n\n \/**\n * GET \/semantic-explorer\/dokumente\n * Liste aller Dokumente\n *\/\n public function dokumente(): void\n {\n $status = $this->getString('status');\n $search = $this->getString('search');\n\n $documents = $this->documentRepository->findFiltered($status, $search);\n\n $this->view('semantic-explorer.dokumente.index', [\n 'title' => 'Dokumente',\n 'documents' => $documents,\n 'currentStatus' => $status,\n 'currentSearch' => $search,\n ]);\n }\n\n \/**\n * GET \/semantic-explorer\/dokumente\/{id}\n * Dokument-Details mit Chunks\n *\/\n public function dokumentShow(int $id): void\n {\n $document = $this->documentRepository->find($id);\n\n if ($document === null) {\n $this->notFound('Dokument nicht gefunden');\n }\n\n $chunks = $this->chunkRepository->findByDocument($id);\n\n \/\/ Heading-Paths dekodieren\n foreach ($chunks as &$chunk) {\n $chunk['heading_path_decoded'] = $this->decodeJson($chunk['heading_path'] ?? null);\n $chunk['metadata_decoded'] = $this->decodeJson($chunk['metadata'] ?? null);",
"numLines": 100,
"startLine": 1,
"totalLines": 296
}
}
}