{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/mcp-servers\/mcp_code\/tools\/dependents.py"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/mcp-servers\/mcp_code\/tools\/impact.py",
"content": "\"\"\"code_impact - Impact-Analyse bei Klassenänderung.\"\"\"\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/mcp_code\")\nfrom db import execute_query\n\n\ndef register_impact_tool(mcp):\n \"\"\"Registriert code_impact Tool.\"\"\"\n\n @mcp.tool()\n def code_impact(fqcn: str) -> dict:\n \"\"\"\n Analysiert den Impact bei Änderung einer Klasse.\n\n Args:\n fqcn: Vollständiger Klassenname (z.B. Controller\\\\HomeController)\n\n Returns:\n Dict mit fqcn, direct_dependents, risk_level, affected_namespaces, recommendation\n \"\"\"\n # Dependents laden (gleiche Query wie code_dependents)\n sql = \"\"\"\n SELECT ca.id as file_id, ca.file_name, ca.namespace, cd.dependency_type\n FROM code_dependencies cd\n JOIN code_analysis ca ON cd.analysis_id = ca.id\n WHERE cd.target_fqcn = %s\n ORDER BY ca.file_name\n \"\"\"\n dependents = execute_query(sql, (fqcn,))\n count = len(dependents)\n\n # Risk Level berechnen\n if count == 0:\n risk_level = \"low\"\n recommendation = \"Keine Abhängigkeiten. Änderungen sicher.\"\n elif count <= 5:\n risk_level = \"medium\"\n recommendation = f\"Moderate Abhängigkeiten ({count}). Änderungen mit Vorsicht.\"\n elif count <= 15:\n risk_level = \"high\"\n recommendation = f\"Viele Abhängigkeiten ({count}). Gründliche Tests empfohlen.\"\n else:\n risk_level = \"critical\"\n recommendation = f\"Kritisch viele Abhängigkeiten ({count}). Breaking Changes vermeiden!\"\n\n # Betroffene Namespaces sammeln\n affected_namespaces = list(set(\n d[\"namespace\"] for d in dependents if d[\"namespace\"]\n ))\n affected_namespaces.sort()\n\n # Dependency-Typen gruppieren\n by_type = {}\n for d in dependents:\n t = d[\"dependency_type\"]\n if t not in by_type:\n by_type[t] = 0\n by_type[t] += 1\n\n return {\n \"fqcn\": fqcn,\n \"direct_dependents\": count,\n \"risk_level\": risk_level,\n \"affected_namespaces\": affected_namespaces,\n \"dependents_by_type\": by_type,\n \"recommendation\": recommendation,\n }\n",
"numLines": 69,
"startLine": 1,
"totalLines": 69
}
}
}