feat: erweitere die Mindmap-API zur dynamischen Erstellung und Anzeige wissenschaftlicher Knoten sowie zur Verbesserung der Fehlerbehandlung. Füge neues Skript zur Aktualisierung der Mindmap hinzu.

This commit is contained in:
2025-05-03 19:44:18 +01:00
parent 40b28134fc
commit 1cf7bfbf76
6 changed files with 260 additions and 39 deletions

84
app.py
View File

@@ -1142,32 +1142,64 @@ def delete_note(note_id):
# API routes for mindmap and thoughts
@app.route('/api/mindmap')
def get_mindmap():
"""API-Endpunkt zur Bereitstellung der Mindmap-Daten in hierarchischer Form."""
# Root-Knoten: Knoten ohne Eltern
root_nodes = MindMapNode.query.\
outerjoin(node_relationship, MindMapNode.id == node_relationship.c.child_id).\
filter(node_relationship.c.parent_id == None).all()
result = []
for node in root_nodes:
node_data = build_node_tree(node)
result.append(node_data)
return jsonify({"nodes": result})
def build_node_tree(node):
"""Erzeugt eine hierarchische Darstellung eines Knotens inkl. seiner Kindknoten."""
thought_count = len(node.thoughts)
node_data = {
"id": node.id,
"name": node.name,
"description": node.description or "",
"thought_count": thought_count,
"children": []
}
for child in node.children:
child_data = build_node_tree(child)
node_data["children"].append(child_data)
return node_data
"""Gibt die Mindmap-Struktur zurück"""
try:
# Hauptknoten abrufen (Root-Knoten)
wissen_node = MindMapNode.query.filter_by(name="Wissen").first()
if not wissen_node:
# Wissen-Knoten erstellen, falls nicht vorhanden
wissen_node = MindMapNode(
name="Wissen",
description="Zentrale Wissensbasis",
color_code="#4299E1",
is_public=True
)
db.session.add(wissen_node)
db.session.commit()
# Alle anderen aktiven Knoten holen
nodes = MindMapNode.query.filter(MindMapNode.is_public == True).all()
# Ergebnisdaten vorbereiten
nodes_data = []
edges_data = []
# Knoten hinzufügen
for node in nodes:
nodes_data.append({
'id': node.id,
'name': node.name,
'description': node.description or '',
'color_code': node.color_code or '#9F7AEA'
})
# Wenn es nicht der Wissen-Knoten ist, Verbindung zum Wissen-Knoten hinzufügen
if node.id != wissen_node.id:
edges_data.append({
'source': wissen_node.id,
'target': node.id
})
# Beziehungen zwischen Knoten abfragen und hinzufügen
relationships = db.session.query(node_relationship).all()
for rel in relationships:
if rel.parent_id != wissen_node.id: # Doppelte Kanten vermeiden
edges_data.append({
'source': rel.parent_id,
'target': rel.child_id
})
return jsonify({
'nodes': nodes_data,
'edges': edges_data
})
except Exception as e:
print(f"Fehler beim Abrufen der Mindmap: {str(e)}")
return jsonify({
'success': False,
'error': 'Mindmap konnte nicht geladen werden'
}), 500
@app.route('/api/nodes/<int:node_id>/thoughts')
def get_node_thoughts(node_id):