From af30a208caff8df47d2ac65bfa00e9634485e19c Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 14 May 2025 12:02:15 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20=C3=84nderungen=20commited?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/app.cpython-313.pyc | Bin 108235 -> 111466 bytes app.py | 102 ++++++++++++++++---------------- logs/app.log | 24 ++++++++ 3 files changed, 75 insertions(+), 51 deletions(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index a395e7797a170c2063bd47a41b4f558bacdd5d97..66a642df2c146fadebaa4f612b47bda1fe8d6811 100644 GIT binary patch delta 16868 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 U(m1b9cUfnE=ga0OZ@TG!0V2~T5&!@I delta 14742 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 PnW@x1Iw14XlC=K=Aq~7^ diff --git a/app.py b/app.py index 5b39231..bd17c17 100644 --- a/app.py +++ b/app.py @@ -2062,6 +2062,57 @@ def dummy_network_bg(): """Leere Antwort für die nicht mehr verwendeten Netzwerk-Hintergrundbilder.""" return '', 200 +def get_category_mindmap_data(category_name): + """Generische Funktion zum Abrufen der Mindmap-Daten für eine Kategorie.""" + try: + # Kategorie mit allen Unterkategorien in einer Abfrage laden + category = Category.query.filter_by(name=category_name).options( + joinedload(Category.children) + ).first_or_404() + + # Basis-Knoten erstellen + nodes = [{ + 'id': f'cat_{category.id}', + 'name': category.name, + 'description': category.description or '', + 'color_code': category.color_code or '#9F7AEA', + 'is_center': True, + 'has_children': bool(category.children), + 'icon': category.icon or 'fa-solid fa-circle' + }] + + # Unterkategorien hinzufügen + for subcat in category.children: + nodes.append({ + 'id': f'cat_{subcat.id}', + 'name': subcat.name, + 'description': subcat.description or '', + 'color_code': subcat.color_code or '#9F7AEA', + 'category': category_name, + 'has_children': bool(subcat.children), + 'icon': subcat.icon or 'fa-solid fa-circle' + }) + + # Kanten erstellen (vereinheitlichte Schlüssel) + edges = [{ + 'source': f'cat_{category.id}', + 'target': f'cat_{subcat.id}', + 'strength': 0.8 + } for subcat in category.children] + + return jsonify({ + 'success': True, + 'nodes': nodes, + 'edges': edges + }) + except Exception as e: + print(f"Fehler beim Abrufen der {category_name}-Mindmap: {str(e)}") + return jsonify({ + 'success': False, + 'error': f'{category_name}-Mindmap konnte nicht geladen werden', + 'details': str(e) + }), 500 + # API-Endpunkt für die Root-Mindmap @app.route('/api/mindmap/root') def get_root_mindmap_data(): @@ -2486,54 +2537,3 @@ if __name__ == '__main__': db.create_all() socketio.run(app, debug=True, host='0.0.0.0') -def get_category_mindmap_data(category_name): - """Generische Funktion zum Abrufen der Mindmap-Daten für eine Kategorie.""" - try: - # Kategorie mit allen Unterkategorien in einer Abfrage laden - category = Category.query.filter_by(name=category_name).options( - joinedload(Category.children) - ).first_or_404() - - # Basis-Knoten erstellen - nodes = [{ - 'id': f'cat_{category.id}', - 'name': category.name, - 'description': category.description or '', - 'color_code': category.color_code or '#9F7AEA', - 'is_center': True, - 'has_children': bool(category.children), - 'icon': category.icon or 'fa-solid fa-circle' - }] - - # Unterkategorien hinzufügen - for subcat in category.children: - nodes.append({ - 'id': f'cat_{subcat.id}', - 'name': subcat.name, - 'description': subcat.description or '', - 'color_code': subcat.color_code or '#9F7AEA', - 'category': category_name, - 'has_children': bool(subcat.children), - 'icon': subcat.icon or 'fa-solid fa-circle' - }) - - # Kanten erstellen (vereinheitlichte Schlüssel) - edges = [{ - 'source': f'cat_{category.id}', - 'target': f'cat_{subcat.id}', - 'strength': 0.8 - } for subcat in category.children] - - return jsonify({ - 'success': True, - 'nodes': nodes, - 'edges': edges - }) - except Exception as e: - print(f"Fehler beim Abrufen der {category_name}-Mindmap: {str(e)}") - return jsonify({ - 'success': False, - 'error': f'{category_name}-Mindmap konnte nicht geladen werden', - 'details': str(e) - }), 500 - diff --git a/logs/app.log b/logs/app.log index 9f25b31..c0b641d 100644 --- a/logs/app.log +++ b/logs/app.log @@ -386,3 +386,27 @@ werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not found on 2025-05-14 11:57:53,663 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] 2025-05-14 11:57:53,735 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] 2025-05-14 11:57:53,735 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:30,759 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:30,772 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:31,700 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:33,338 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:33,338 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:33,379 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:33,379 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:34,054 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:58:34,054 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:10,737 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:10,882 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:11,126 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,336 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,336 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,340 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,340 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,411 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:13,411 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:35,991 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:38,480 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:38,480 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:42,332 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:44,589 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:59:44,589 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77]