{
"event": "PostToolUse",
"raw_data": {
"session_id": "18ef5bf3-e872-4052-897e-53d6dc45b0b9",
"transcript_path": "\/root\/.claude\/projects\/-var-www\/18ef5bf3-e872-4052-897e-53d6dc45b0b9.jsonl",
"cwd": "\/var\/www\/dev.campus.systemische-tools.de",
"permission_mode": "plan",
"hook_event_name": "PostToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/ContractRepository.php",
"limit": 100
},
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/ContractRepository.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Infrastructure\\Persistence;\n\n\/\/ @responsibility: Persistenz für Contracts (YAML-Inhalte, Validierungen)\n\nuse Infrastructure\\Config\\DatabaseFactory;\nuse PDO;\n\nclass ContractRepository\n{\n private PDO $pdo;\n\n public function __construct(?PDO $pdo = null)\n {\n $this->pdo = $pdo ?? DatabaseFactory::dev();\n }\n\n public function findAll(array $filters = [], int $limit = 50): array\n {\n $sql = 'SELECT * FROM contracts WHERE 1=1';\n $params = [];\n\n if (isset($filters['status']) && $filters['status'] !== '') {\n $sql .= ' AND status = :status';\n $params['status'] = $filters['status'];\n }\n\n if (isset($filters['search']) && $filters['search'] !== '') {\n $sql .= ' AND (name LIKE :search OR scope_description LIKE :search2)';\n $params['search'] = '%' . $filters['search'] . '%';\n $params['search2'] = '%' . $filters['search'] . '%';\n }\n\n $sql .= ' ORDER BY name ASC, version DESC LIMIT :limit';\n\n $stmt = $this->pdo->prepare($sql);\n foreach ($params as $key => $value) {\n $stmt->bindValue(':' . $key, $value);\n }\n $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);\n $stmt->execute();\n\n return $stmt->fetchAll(PDO::FETCH_ASSOC);\n }\n\n public function findById(int $id): ?array\n {\n $stmt = $this->pdo->prepare('SELECT * FROM contracts WHERE id = :id');\n $stmt->execute(['id' => $id]);\n $result = $stmt->fetch(PDO::FETCH_ASSOC);\n\n return $result ?: null;\n }\n\n public function findByName(string $name, ?string $version = null): ?array\n {\n if ($version !== null) {\n $stmt = $this->pdo->prepare(\n 'SELECT * FROM contracts WHERE name = :name AND version = :version'\n );\n $stmt->execute(['name' => $name, 'version' => $version]);\n } else {\n $stmt = $this->pdo->prepare(\n \"SELECT * FROM contracts WHERE name = :name AND status = 'active' ORDER BY version DESC LIMIT 1\"\n );\n $stmt->execute(['name' => $name]);\n }\n\n $result = $stmt->fetch(PDO::FETCH_ASSOC);\n\n return $result ?: null;\n }\n\n public function create(array $data): int\n {\n $stmt = $this->pdo->prepare('\n INSERT INTO contracts (uuid, name, version, status, yaml_content, scope_description, created_by)\n VALUES (UUID(), :name, :version, :status, :yaml_content, :scope_description, :created_by)\n ');\n\n $stmt->execute([\n 'name' => $data['name'],\n 'version' => $data['version'] ?? '1.0',\n 'status' => $data['status'] ?? 'active',\n 'yaml_content' => $data['yaml_content'],\n 'scope_description' => $data['scope_description'] ?? null,\n 'created_by' => $data['created_by'] ?? 'web',\n ]);\n\n return (int) $this->pdo->lastInsertId();\n }\n\n public function createNewVersion(int $id, string $yamlContent, string $newVersion, string $changeDescription): void\n {\n $contract = $this->findById($id);\n if ($contract === null) {\n throw new \\RuntimeException(\"Contract {$id} not found\");",
"numLines": 100,
"startLine": 1,
"totalLines": 267
}
},
"tool_use_id": "toolu_01XjskYw9dE48cCmZnohp52N"
}
}