{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_create",
"tool_input": {
"title": "Architektur",
"slug": "architektur",
"parent_id": 55,
"description": "Clean Architecture Übersicht: Backend (MVC), Frontend (MVP), Datenbanken, Layer-Struktur",
"content": "<nav class=\"breadcrumb\">\n <a href=\"\/docs\">Dokumentation<\/a> » <a href=\"\/docs\/betrieb\">Betrieb<\/a> » Architektur\n<\/nav>\n\n<h1>Architektur<\/h1>\n<p>Clean Architecture Übersicht für das Campus-System. Strikte Trennung zwischen Backend (MVC), Frontend (MVP) und Infrastruktur.<\/p>\n\n<table>\n <tr><th>Projekt-Root<\/th><td>\/var\/www\/dev.campus.systemische-tools.de\/<\/td><\/tr>\n <tr><th>Backend<\/th><td>MVC Pattern (\/src)<\/td><\/tr>\n <tr><th>Frontend<\/th><td>MVP Pattern (\/app)<\/td><\/tr>\n <tr><th>Datenbanken<\/th><td>ki_dev, ki_content<\/td><\/tr>\n<\/table>\n\n<h2>Backend-Architektur (MVC)<\/h2>\n<p>Pfad: <code>\/src\/<\/code><\/p>\n\n<table>\n <tr><th>Verzeichnis<\/th><th>Zweck<\/th><th>Beispiele<\/th><\/tr>\n <tr><td>Framework\/<\/td><td>App-Kern, Router, Controller-Base<\/td><td>App.php, Router.php, Controller.php<\/td><\/tr>\n <tr><td>Controller\/<\/td><td>HTTP Controller (Request → Response)<\/td><td>TaskController, ChatController<\/td><\/tr>\n <tr><td>Domain\/<\/td><td>Entities, Repository-Interfaces<\/td><td>Task.php, TaskRepositoryInterface<\/td><\/tr>\n <tr><td>UseCases\/<\/td><td>Anwendungsfälle (Business Logic)<\/td><td>CreateTaskUseCase, ExecuteTaskUseCase<\/td><\/tr>\n <tr><td>Infrastructure\/<\/td><td>DB, External Services<\/td><td>TaskRepository, OllamaService<\/td><\/tr>\n <tr><td>View\/<\/td><td>Server-Templates (PHP)<\/td><td>tasks\/index.php, chat\/show.php<\/td><\/tr>\n<\/table>\n\n<h3>Layer-Regeln<\/h3>\n<pre><code>Controller → UseCase → Repository (via Interface)\n ↓ ↓ ↓\n Request Business Infrastructure\n Handler Logic (MySQL, API)\n\nVERBOTEN:\n- Controller → Repository direkt (muss über UseCase)\n- UseCase → Infrastructure konkret (nur Interface)\n- View → Database (niemals)<\/code><\/pre>\n\n<h2>Frontend-Architektur (MVP)<\/h2>\n<p>Pfad: <code>\/app\/<\/code><\/p>\n\n<table>\n <tr><th>Verzeichnis<\/th><th>Zweck<\/th><th>Beispiele<\/th><\/tr>\n <tr><td>Presenter\/<\/td><td>UI-Logik, View-Model Aufbereitung<\/td><td>TaskPresenter, ChatPresenter<\/td><\/tr>\n <tr><td>View\/<\/td><td>Passive Views (nur Anzeige)<\/td><td>TaskListView, ChatView<\/td><\/tr>\n<\/table>\n\n<h3>MVP-Prinzip<\/h3>\n<ul>\n <li><strong>Model:<\/strong> Domain-Entities (aus \/src\/Domain)<\/li>\n <li><strong>View:<\/strong> Passive Templates, keine Logik<\/li>\n <li><strong>Presenter:<\/strong> Bereitet Daten für View auf, enthält UI-Logik<\/li>\n<\/ul>\n\n<h2>Datenbanken<\/h2>\n<table>\n <tr><th>Datenbank<\/th><th>Zweck<\/th><th>Beispiel-Tabellen<\/th><\/tr>\n <tr><td>ki_dev<\/td><td>Infrastruktur\/Development<\/td><td>tasks, contracts, dokumentation, mcp_log, file_backup_history<\/td><\/tr>\n <tr><td>ki_content<\/td><td>Content\/User-facing<\/td><td>chat_sessions, chat_messages, content, documents, chunks, entities<\/td><\/tr>\n<\/table>\n\n<h3>Zugriff<\/h3>\n<p><strong>Kein direkter SQL-Zugriff!<\/strong> Immer über MCP-DB:<\/p>\n<pre><code>mcp__mcp-db__db_select(query, database=\"ki_dev\")\nmcp__mcp-db__db_insert(table, data, database=\"ki_content\")<\/code><\/pre>\n\n<h2>Verzeichnisstruktur<\/h2>\n<pre><code>\/var\/www\/dev.campus.systemische-tools.de\/\n├── src\/ # Backend (MVC)\n│ ├── Framework\/ # App, Router, Controller-Base\n│ ├── Controller\/ # HTTP Controller\n│ ├── Domain\/ # Entity, Repository-Interfaces\n│ ├── UseCases\/ # Anwendungsfälle\n│ ├── Infrastructure\/ # DB, External Services\n│ └── View\/ # Server-Templates\n├── app\/ # Frontend (MVP)\n│ ├── Presenter\/ # UI-Logik\n│ └── View\/ # Passive Views\n├── public\/ # Web-Root\n│ ├── index.php # Entry Point\n│ ├── css\/ # Stylesheets\n│ └── js\/ # JavaScript\n├── config\/ # Konfiguration\n│ ├── config.php # App-Config\n│ └── autoload.php # PSR-4 Autoloader\n├── routes\/ # Web-Routes\n│ └── web.php # Route-Definitionen\n└── storage\/ # Logs, Cache\n └── logs\/ # Application Logs<\/code><\/pre>\n\n<h2>Dependency Injection<\/h2>\n<p>Der DI-Container in <code>\/src\/services.php<\/code> bindet Interfaces an Implementierungen:<\/p>\n<pre><code>\/\/ Interface → Implementation\nTaskRepositoryInterface::class => TaskRepository::class\nOllamaServiceInterface::class => OllamaService::class\n\n\/\/ Controller bekommt Dependencies via Constructor\nclass TaskController extends Controller {\n public function __construct(\n private TaskRepositoryInterface $taskRepository,\n private CreateTaskUseCase $createTask\n ) {}\n}<\/code><\/pre>\n\n<h2>Request-Lifecycle<\/h2>\n<pre><code>1. Request → public\/index.php\n2. App::bootstrap() → Autoload, Config, DI-Container\n3. Router::dispatch() → Route matchen\n4. Controller::action() → UseCase aufrufen\n5. UseCase → Repository → Database\n6. View::render() → HTML Response\n7. Response → Browser<\/code><\/pre>\n\n<h2>Code-Analyse<\/h2>\n<p>Vor Refactoring immer MCP-Code nutzen:<\/p>\n<pre><code># Klasse finden\nmcp__mcp-code__code_search(\"TaskController\")\n\n# Dependencies prüfen\nmcp__mcp-code__code_dependencies(\"Controller\\\\TaskController\")\n\n# Impact vor Änderung\nmcp__mcp-code__code_impact(\"Domain\\\\Entity\\\\Task\")<\/code><\/pre>\n\n<h2>Verwandte Themen<\/h2>\n<ul>\n <li><a href=\"\/docs\/betrieb\/regeln\">Regeln<\/a> - Entwicklungs-Regeln<\/li>\n <li><a href=\"\/docs\/qualitaet\/php-quality\">PHP-Quality<\/a> - Code-Qualität<\/li>\n <li><a href=\"\/docs\/mcp\/mcp-code\">MCP-Code<\/a> - Code-Analyse Tools<\/li>\n <li><a href=\"\/docs\/mcp\/mcp-db\">MCP-DB<\/a> - Datenbankzugriff<\/li>\n<\/ul>",
"status": "published",
"sort_order": 10
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 148,\n \"parent_id\": 55,\n \"slug\": \"architektur\",\n \"path\": \"\/betrieb\/architektur\",\n \"title\": \"Architektur\",\n \"description\": \"Clean Architecture Übersicht: Backend (MVC), Frontend (MVP), Datenbanken, Layer-Struktur\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/betrieb\\\">Betrieb<\/a> » Architektur\\n<\/nav>\\n\\n<h1>Architektur<\/h1>\\n<p>Clean Architecture Übersicht für das Campus-System. Strikte Trennung zwischen Backend (MVC), Frontend (MVP) und Infrastruktur.<\/p>\\n\\n<table>\\n <tr><th>Projekt-Root<\/th><td>\/var\/www\/dev.campus.systemische-tools.de\/<\/td><\/tr>\\n <tr><th>Backend<\/th><td>MVC Pattern (\/src)<\/td><\/tr>\\n <tr><th>Frontend<\/th><td>MVP Pattern (\/app)<\/td><\/tr>\\n <tr><th>Datenbanken<\/th><td>ki_dev, ki_content<\/td><\/tr>\\n<\/table>\\n\\n<h2>Backend-Architektur (MVC)<\/h2>\\n<p>Pfad: <code>\/src\/<\/code><\/p>\\n\\n<table>\\n <tr><th>Verzeichnis<\/th><th>Zweck<\/th><th>Beispiele<\/th><\/tr>\\n <tr><td>Framework\/<\/td><td>App-Kern, Router, Controller-Base<\/td><td>App.php, Router.php, Controller.php<\/td><\/tr>\\n <tr><td>Controller\/<\/td><td>HTTP Controller (Request → Response)<\/td><td>TaskController, ChatController<\/td><\/tr>\\n <tr><td>Domain\/<\/td><td>Entities, Repository-Interfaces<\/td><td>Task.php, TaskRepositoryInterface<\/td><\/tr>\\n <tr><td>UseCases\/<\/td><td>Anwendungsfälle (Business Logic)<\/td><td>CreateTaskUseCase, ExecuteTaskUseCase<\/td><\/tr>\\n <tr><td>Infrastructure\/<\/td><td>DB, External Services<\/td><td>TaskRepository, OllamaService<\/td><\/tr>\\n <tr><td>View\/<\/td><td>Server-Templates (PHP)<\/td><td>tasks\/index.php, chat\/show.php<\/td><\/tr>\\n<\/table>\\n\\n<h3>Layer-Regeln<\/h3>\\n<pre><code>Controller → UseCase → Repository (via Interface)\\n ↓ ↓ ↓\\n Request Business Infrastructure\\n Handler Logic (MySQL, API)\\n\\nVERBOTEN:\\n- Controller → Repository direkt (muss über UseCase)\\n- UseCase → Infrastructure konkret (nur Interface)\\n- View → Database (niemals)<\/code><\/pre>\\n\\n<h2>Frontend-Architektur (MVP)<\/h2>\\n<p>Pfad: <code>\/app\/<\/code><\/p>\\n\\n<table>\\n <tr><th>Verzeichnis<\/th><th>Zweck<\/th><th>Beispiele<\/th><\/tr>\\n <tr><td>Presenter\/<\/td><td>UI-Logik, View-Model Aufbereitung<\/td><td>TaskPresenter, ChatPresenter<\/td><\/tr>\\n <tr><td>View\/<\/td><td>Passive Views (nur Anzeige)<\/td><td>TaskListView, ChatView<\/td><\/tr>\\n<\/table>\\n\\n<h3>MVP-Prinzip<\/h3>\\n<ul>\\n <li><strong>Model:<\/strong> Domain-Entities (aus \/src\/Domain)<\/li>\\n <li><strong>View:<\/strong> Passive Templates, keine Logik<\/li>\\n <li><strong>Presenter:<\/strong> Bereitet Daten für View auf, enthält UI-Logik<\/li>\\n<\/ul>\\n\\n<h2>Datenbanken<\/h2>\\n<table>\\n <tr><th>Datenbank<\/th><th>Zweck<\/th><th>Beispiel-Tabellen<\/th><\/tr>\\n <tr><td>ki_dev<\/td><td>Infrastruktur\/Development<\/td><td>tasks, contracts, dokumentation, mcp_log, file_backup_history<\/td><\/tr>\\n <tr><td>ki_content<\/td><td>Content\/User-facing<\/td><td>chat_sessions, chat_messages, content, documents, chunks, entities<\/td><\/tr>\\n<\/table>\\n\\n<h3>Zugriff<\/h3>\\n<p><strong>Kein direkter SQL-Zugriff!<\/strong> Immer über MCP-DB:<\/p>\\n<pre><code>mcp__mcp-db__db_select(query, database=\\\"ki_dev\\\")\\nmcp__mcp-db__db_insert(table, data, database=\\\"ki_content\\\")<\/code><\/pre>\\n\\n<h2>Verzeichnisstruktur<\/h2>\\n<pre><code>\/var\/www\/dev.campus.systemische-tools.de\/\\n├── src\/ # Backend (MVC)\\n│ ├── Framework\/ # App, Router, Controller-Base\\n│ ├── Controller\/ # HTTP Controller\\n│ ├── Domain\/ # Entity, Repository-Interfaces\\n│ ├── UseCases\/ # Anwendungsfälle\\n│ ├── Infrastructure\/ # DB, External Services\\n│ └── View\/ # Server-Templates\\n├── app\/ # Frontend (MVP)\\n│ ├── Presenter\/ # UI-Logik\\n│ └── View\/ # Passive Views\\n├── public\/ # Web-Root\\n│ ├── index.php # Entry Point\\n│ ├── css\/ # Stylesheets\\n│ └── js\/ # JavaScript\\n├── config\/ # Konfiguration\\n│ ├── config.php # App-Config\\n│ └── autoload.php # PSR-4 Autoloader\\n├── routes\/ # Web-Routes\\n│ └── web.php # Route-Definitionen\\n└── storage\/ # Logs, Cache\\n └── logs\/ # Application Logs<\/code><\/pre>\\n\\n<h2>Dependency Injection<\/h2>\\n<p>Der DI-Container in <code>\/src\/services.php<\/code> bindet Interfaces an Implementierungen:<\/p>\\n<pre><code>\/\/ Interface → Implementation\\nTaskRepositoryInterface::class => TaskRepository::class\\nOllamaServiceInterface::class => OllamaService::class\\n\\n\/\/ Controller bekommt Dependencies via Constructor\\nclass TaskController extends Controller {\\n public function __construct(\\n private TaskRepositoryInterface $taskRepository,\\n private CreateTaskUseCase $createTask\\n ) {}\\n}<\/code><\/pre>\\n\\n<h2>Request-Lifecycle<\/h2>\\n<pre><code>1. Request → public\/index.php\\n2. App::bootstrap() → Autoload, Config, DI-Container\\n3. Router::dispatch() → Route matchen\\n4. Controller::action() → UseCase aufrufen\\n5. UseCase → Repository → Database\\n6. View::render() → HTML Response\\n7. Response → Browser<\/code><\/pre>\\n\\n<h2>Code-Analyse<\/h2>\\n<p>Vor Refactoring immer MCP-Code nutzen:<\/p>\\n<pre><code># Klasse finden\\nmcp__mcp-code__code_search(\\\"TaskController\\\")\\n\\n# Dependencies prüfen\\nmcp__mcp-code__code_dependencies(\\\"Controller\\\\\\\\TaskController\\\")\\n\\n# Impact vor Änderung\\nmcp__mcp-code__code_impact(\\\"Domain\\\\\\\\Entity\\\\\\\\Task\\\")<\/code><\/pre>\\n\\n<h2>Verwandte Themen<\/h2>\\n<ul>\\n <li><a href=\\\"\/docs\/betrieb\/regeln\\\">Regeln<\/a> - Entwicklungs-Regeln<\/li>\\n <li><a href=\\\"\/docs\/qualitaet\/php-quality\\\">PHP-Quality<\/a> - Code-Qualität<\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-code\\\">MCP-Code<\/a> - Code-Analyse Tools<\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-db\\\">MCP-DB<\/a> - Datenbankzugriff<\/li>\\n<\/ul>\",\n \"status\": \"published\",\n \"sort_order\": 10,\n \"depth\": 1,\n \"created_at\": \"2025-12-27T15:37:31\",\n \"updated_at\": \"2025-12-27T15:37:31\"\n },\n \"message\": \"Document 'Architektur' created with ID 148\"\n}"
}
]
}