✨ feat: enhance UI and functionality for mindmap creation and profile pages
This commit is contained in:
160
app.py
160
app.py
@@ -628,16 +628,156 @@ def delete_mindmap(mindmap_id):
|
||||
# API-Endpunkte für Mindmap-Daten
|
||||
@app.route('/api/mindmap/public')
|
||||
def get_public_mindmap():
|
||||
"""Liefert die öffentliche Mindmap-Struktur."""
|
||||
# Hole alle Kategorien der obersten Ebene
|
||||
root_categories = Category.query.filter_by(parent_id=None).all()
|
||||
|
||||
# Baue Baumstruktur auf
|
||||
result = []
|
||||
for category in root_categories:
|
||||
result.append(build_category_tree(category))
|
||||
|
||||
return jsonify(result)
|
||||
"""Liefert die Standard-Mindmap-Struktur basierend auf Kategorien."""
|
||||
try:
|
||||
# Hole alle Hauptkategorien
|
||||
categories = Category.query.filter_by(parent_id=None).all()
|
||||
|
||||
# Transformiere zu einer Baumstruktur
|
||||
category_tree = [build_category_tree(cat) for cat in categories]
|
||||
|
||||
return jsonify(category_tree)
|
||||
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/mindmap/public/add_node', methods=['POST'])
|
||||
@login_required
|
||||
def add_node_to_public_mindmap():
|
||||
"""Fügt einen neuen Knoten zur öffentlichen Mindmap hinzu."""
|
||||
try:
|
||||
data = request.json
|
||||
|
||||
name = data.get('name')
|
||||
description = data.get('description', '')
|
||||
color_code = data.get('color_code', '#8b5cf6')
|
||||
x_position = data.get('x_position', 0)
|
||||
y_position = data.get('y_position', 0)
|
||||
|
||||
if not name:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'error': 'Knotenname ist erforderlich'
|
||||
}), 400
|
||||
|
||||
# Neuen Knoten erstellen
|
||||
new_node = MindMapNode(
|
||||
name=name,
|
||||
description=description,
|
||||
color_code=color_code
|
||||
)
|
||||
|
||||
db.session.add(new_node)
|
||||
db.session.flush() # ID generieren
|
||||
|
||||
# Als Beitrag des aktuellen Benutzers markieren
|
||||
new_node.contributed_by = current_user.id
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'node_id': new_node.id,
|
||||
'message': 'Knoten erfolgreich hinzugefügt'
|
||||
})
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
print(f"Fehler beim Hinzufügen des Knotens: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'error': f'Fehler beim Hinzufügen des Knotens: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@app.route('/api/mindmap/public/update_node/<int:node_id>', methods=['PUT'])
|
||||
@login_required
|
||||
def update_public_node(node_id):
|
||||
"""Aktualisiert einen Knoten in der öffentlichen Mindmap."""
|
||||
try:
|
||||
node = MindMapNode.query.get_or_404(node_id)
|
||||
data = request.json
|
||||
|
||||
# Aktualisiere Knotendaten
|
||||
if 'name' in data:
|
||||
node.name = data['name']
|
||||
if 'description' in data:
|
||||
node.description = data['description']
|
||||
if 'color_code' in data:
|
||||
node.color_code = data['color_code']
|
||||
|
||||
# Als bearbeitet markieren
|
||||
node.last_modified = datetime.utcnow()
|
||||
node.last_modified_by = current_user.id
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'Knoten erfolgreich aktualisiert'
|
||||
})
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
print(f"Fehler beim Aktualisieren des Knotens: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'error': f'Fehler beim Aktualisieren des Knotens: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@app.route('/api/mindmap/public/remove_node/<int:node_id>', methods=['DELETE'])
|
||||
@login_required
|
||||
def remove_node_from_public_mindmap(node_id):
|
||||
"""Entfernt einen Knoten aus der öffentlichen Mindmap."""
|
||||
try:
|
||||
node = MindMapNode.query.get_or_404(node_id)
|
||||
|
||||
# Lösche den Knoten
|
||||
db.session.delete(node)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'Knoten erfolgreich entfernt'
|
||||
})
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
print(f"Fehler beim Entfernen des Knotens: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'error': f'Fehler beim Entfernen des Knotens: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@app.route('/api/mindmap/public/update_layout', methods=['POST'])
|
||||
@login_required
|
||||
def update_public_layout():
|
||||
"""Aktualisiert die Positionen der Knoten in der öffentlichen Mindmap."""
|
||||
try:
|
||||
data = request.json
|
||||
positions = data.get('positions', [])
|
||||
|
||||
for pos in positions:
|
||||
node_id = pos.get('node_id')
|
||||
node = MindMapNode.query.get(node_id)
|
||||
|
||||
if node:
|
||||
# Position aktualisieren
|
||||
node.x_position = pos.get('x_position', 0)
|
||||
node.y_position = pos.get('y_position', 0)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'Layout erfolgreich aktualisiert'
|
||||
})
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
print(f"Fehler beim Aktualisieren des Layouts: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'error': f'Fehler beim Aktualisieren des Layouts: {str(e)}'
|
||||
}), 500
|
||||
|
||||
def build_category_tree(category):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user