From 3aefe6c5e6747f40a57a2d8593230d34671d6dba Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 14 May 2025 11:23:33 +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 110921 -> 111458 bytes app.py | 14 +++- init_db.py | 130 +++++++++++++++++++++++++------- logs/app.log | 15 ++++ 4 files changed, 131 insertions(+), 28 deletions(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 34f8dda2469fad75d8cd75026c6e612b5390c540..bfd59e4c6f023570a7cb995aca9bfa318f7606fb 100644 GIT binary patch delta 1226 zcmY*XT}&KR6uxJEc4z;FU6@_yE|jUT4aiSHXd4j(+6t(kgkcf0sdklF*q{T>EJYg= ztM#F20~99lrcFZvCVjBR5^aTQQvn05KGa2sC5A*(e-dBJR)|p(8}BWw;yiqF?sv}l zzB6a;7k4aoezu6~E|(pVXZ=Wi&k6la@rnptryNegu$29V#m@zx4S#hCI?U@E4lx^{ za2jo(k79n%?%U5PtimgnQg$zF(bh^Pe|wn_LK&z73}z29m<-e;BGl)>ubc)6&%O?> z0Eno9Np;Ieu_<=Np*R&+*o(_gLxxvW(n_s+Kx3#-(>a7RHpH08vl6GcL#%oC7m1@1 z=F+6keC;P6K5_y);4w#1VLHt)MC}O`cADQQ*@BW$^)^C#!OXpveZRb1RHRbte?zpK zN63L>bboaA-_d>4n+&*RTTE>gui`6ZTbY)u%@&Q**sy1F7i3AU5EJ5*%u?2DJtq|# zj7*lGu~D=Og&#;2Sy7~wDD&HPn-vb4&7bXZ>`v9R6`0?1l9|Y~n^)T%k8#S5a4?k% z@u|uG_apq3jKSn01vI{%&)<4SA&P3)Toi@E0PY=viZ_n!d{T{Rs@xPA=#TeC;%axF z9#b{BTa6BAU8>eFP(_Rm#Nu&Pj(&cvM<+QYrpjFrLq0^xwHG2_8Jzk-3mBJ4cKBn*^g~Jru2z+bn*JE1zdG*y73oZHt z?VQBp!;pm?C&7&uh9NV3hKL@vA!OVm>EkGAc?ADD4Aq^#+mYM9=JX`eA6ju%tY!FD z1M=#QhgSp7+_iGq;yU7_w4{JMQqsmrQW9}4X~T(ZV!~ZC=U*;vp7+n>UFv+lbI!k1 z+?*(CNr+Fa2u~*kTs#7Up4-9drC{}P@X=Y%Qt-gCd=Ot4fusBD0hP4CpTAXdp51?J z_>j}Pj;y?UO>iaL`z{+ZPd*TD?;6x;JGaXz7_&2LJqDy14S)XQu&v0hC;3mwa>jAlDD=W7`1~l8@Ye}5iEoX9Mwps0D6`KJ<^oxuehm+fK?k94jlqNb zJfYv4{(B5ww(vJed}+GxEF`Rcx^JE8>QqXn-8!w+Z{lYsAP3m#!3j7nx@*9_<!m UG9*gYG1xi$`Yv)H-K{-f^>qD+1q}YcxFDOuHU#WADcy+CT&%5{VdyF=o@J^rfKP zkY~h1iUP(UsGy)Sbm$sFDpr6Fes+q)tYGH70Z!41>M>2N?_xcd!68@_OgFwc|J*<^ z*WIjzfrUE0yQsWwrh~`x&%!2B5-=8mWYl#XAq$duco~Y~1P-DE=8IhzZmlt6yk_g z7PunPo*y1s^S~S_C1wBX1z+O)mqA<&ymbX4po(px@9#AZakNjUKyj#cv+kQv&m2hz zvCbs4LMIzdLak*6BcvsGXmu&eB*BL>n5sXwb%pc3bbnQa0t2p{D}#wK8h$#=nN+cTSZ7Jf1` z)3{)7po*4{pLuWu-F)i_=TmN z!1hLHIcS8nsB+H;mlLzK&_ zX{eE2bNOD@eG3K*(p%1_vtxH)+1RANn5O$`x|OC+Yx-GDKco%wrrK#8dO3VC?HxGV ld%pkFehp_+(=cMShrzxnAS~xFXSqILat5a0D9dKx(Qkw#zZC!g diff --git a/app.py b/app.py index 0f0b8ce..6d6d3bb 100644 --- a/app.py +++ b/app.py @@ -2403,6 +2403,17 @@ def get_root_mindmap_data(): joinedload(Category.children) ).all() + # Überprüfen, ob Kategorien vorhanden sind + if not categories: + print("Keine Hauptkategorien gefunden") + return jsonify({ + 'success': False, + 'error': 'Keine Hauptkategorien gefunden', + 'details': 'Bitte führen Sie das Datenbank-Initialisierungsskript aus' + }), 404 + + print(f"Gefundene Hauptkategorien: {[cat.name for cat in categories]}") + # Basis-Knoten erstellen nodes = [{ 'id': 'root', @@ -2422,7 +2433,7 @@ def get_root_mindmap_data(): 'description': category.description or '', 'color_code': category.color_code or '#9F7AEA', 'category': category.name, - 'has_children': bool(category.children), + 'has_children': bool(category.children.count() > 0), 'icon': category.icon or 'fa-solid fa-circle' }) @@ -2440,6 +2451,7 @@ def get_root_mindmap_data(): }) except Exception as e: print(f"Fehler beim Abrufen der Root-Mindmap: {str(e)}") + traceback.print_exc() return jsonify({ 'success': False, 'error': 'Root-Mindmap konnte nicht geladen werden', diff --git a/init_db.py b/init_db.py index 9538b1e..2a841d4 100644 --- a/init_db.py +++ b/init_db.py @@ -1,19 +1,29 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from app import app, initialize_database, db_path -from models import db, User, Thought, Comment, MindMapNode, ThoughtRelation, ThoughtRating, RelationType -from models import Category, UserMindmap, UserMindmapNode, MindmapNote import os import sqlite3 from flask import Flask from flask_sqlalchemy import SQLAlchemy from datetime import datetime +# Pfad zur Datenbank +basedir = os.path.abspath(os.path.dirname(__file__)) +db_path = os.path.join(basedir, 'database', 'systades.db') + +# Stelle sicher, dass das Verzeichnis existiert +db_dir = os.path.dirname(db_path) +os.makedirs(db_dir, exist_ok=True) + # Erstelle eine temporäre Flask-App, um die Datenbank zu initialisieren app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database/systades.db' +app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + +# Importiere die Modelle nach der App-Initialisierung +from models import db, User, Thought, Comment, MindMapNode, ThoughtRelation, ThoughtRating, RelationType +from models import Category, UserMindmap, UserMindmapNode, MindmapNote + db.init_app(app) def init_db(): @@ -69,45 +79,111 @@ def create_default_users(): def create_default_categories(): """Erstellt die Standardkategorien für die Mindmap""" - categories = [ + # Hauptkategorien + main_categories = [ { - 'name': 'Konzept', - 'description': 'Abstrakte Ideen und theoretische Konzepte', - 'color_code': '#6366f1', - 'icon': 'lightbulb' + "name": "Philosophie", + "description": "Philosophisches Denken und Konzepte", + "color_code": "#9F7AEA", + "icon": "fa-brain" }, { - 'name': 'Technologie', - 'description': 'Hardware, Software, Tools und Plattformen', - 'color_code': '#10b981', - 'icon': 'cpu' + "name": "Wissenschaft", + "description": "Wissenschaftliche Disziplinen und Erkenntnisse", + "color_code": "#60A5FA", + "icon": "fa-flask" }, { - 'name': 'Prozess', - 'description': 'Workflows, Methodologien und Vorgehensweisen', - 'color_code': '#f59e0b', - 'icon': 'git-branch' + "name": "Technologie", + "description": "Technologische Entwicklungen und Anwendungen", + "color_code": "#10B981", + "icon": "fa-microchip" }, { - 'name': 'Person', - 'description': 'Personen, Teams und Organisationen', - 'color_code': '#ec4899', - 'icon': 'user' + "name": "Künste", + "description": "Künstlerische Ausdrucksformen und Werke", + "color_code": "#F59E0B", + "icon": "fa-palette" }, { - 'name': 'Dokument', - 'description': 'Dokumentationen, Referenzen und Ressourcen', - 'color_code': '#3b82f6', - 'icon': 'file-text' + "name": "Psychologie", + "description": "Mentale Prozesse und Verhaltensweisen", + "color_code": "#EF4444", + "icon": "fa-brain" } ] - for cat_data in categories: + # Hauptkategorien erstellen + category_map = {} + for cat_data in main_categories: category = Category(**cat_data) db.session.add(category) + db.session.flush() # ID generieren + category_map[cat_data["name"]] = category + + # Unterkategorien für Philosophie + philosophy_subcategories = [ + {"name": "Ethik", "description": "Moralische Grundsätze", "icon": "fa-balance-scale", "color_code": "#8B5CF6"}, + {"name": "Logik", "description": "Gesetze des Denkens", "icon": "fa-project-diagram", "color_code": "#8B5CF6"}, + {"name": "Erkenntnistheorie", "description": "Natur des Wissens", "icon": "fa-lightbulb", "color_code": "#8B5CF6"} + ] + + # Unterkategorien für Wissenschaft + science_subcategories = [ + {"name": "Physik", "description": "Studie der Materie und Energie", "icon": "fa-atom", "color_code": "#3B82F6"}, + {"name": "Biologie", "description": "Studie des Lebens", "icon": "fa-dna", "color_code": "#3B82F6"}, + {"name": "Mathematik", "description": "Studie der Zahlen und Strukturen", "icon": "fa-square-root-alt", "color_code": "#3B82F6"} + ] + + # Unterkategorien für Technologie + tech_subcategories = [ + {"name": "Software", "description": "Computerprogramme und Anwendungen", "icon": "fa-code", "color_code": "#059669"}, + {"name": "Hardware", "description": "Physische Komponenten der Technik", "icon": "fa-microchip", "color_code": "#059669"}, + {"name": "Internet", "description": "Globales Netzwerk und Web", "icon": "fa-globe", "color_code": "#059669"} + ] + + # Unterkategorien für Künste + arts_subcategories = [ + {"name": "Musik", "description": "Klangkunst", "icon": "fa-music", "color_code": "#D97706"}, + {"name": "Literatur", "description": "Geschriebene Kunst", "icon": "fa-book", "color_code": "#D97706"}, + {"name": "Bildende Kunst", "description": "Visuelle Kunst", "icon": "fa-paint-brush", "color_code": "#D97706"} + ] + + # Unterkategorien für Psychologie + psychology_subcategories = [ + {"name": "Kognition", "description": "Gedächtnisprozesse und Denken", "icon": "fa-brain", "color_code": "#DC2626"}, + {"name": "Emotionen", "description": "Gefühle und emotionale Prozesse", "icon": "fa-heart", "color_code": "#DC2626"}, + {"name": "Verhalten", "description": "Beobachtbares Verhalten und Reaktionen", "icon": "fa-user", "color_code": "#DC2626"} + ] + + # Alle Unterkategorien zu ihren Hauptkategorien hinzufügen + for subcat_data in philosophy_subcategories: + subcat = Category(**subcat_data) + subcat.parent_id = category_map["Philosophie"].id + db.session.add(subcat) + + for subcat_data in science_subcategories: + subcat = Category(**subcat_data) + subcat.parent_id = category_map["Wissenschaft"].id + db.session.add(subcat) + + for subcat_data in tech_subcategories: + subcat = Category(**subcat_data) + subcat.parent_id = category_map["Technologie"].id + db.session.add(subcat) + + for subcat_data in arts_subcategories: + subcat = Category(**subcat_data) + subcat.parent_id = category_map["Künste"].id + db.session.add(subcat) + + for subcat_data in psychology_subcategories: + subcat = Category(**subcat_data) + subcat.parent_id = category_map["Psychologie"].id + db.session.add(subcat) db.session.commit() - print(f"{len(categories)} Kategorien wurden erstellt.") + print(f"{len(main_categories)} Hauptkategorien und {len(philosophy_subcategories + science_subcategories + tech_subcategories + arts_subcategories + psychology_subcategories)} Unterkategorien wurden erstellt.") def create_sample_mindmap(): """Erstellt eine Beispiel-Mindmap mit Knoten und Beziehungen""" diff --git a/logs/app.log b/logs/app.log index a1315bf..82ed580 100644 --- a/logs/app.log +++ b/logs/app.log @@ -1 +1,16 @@ 2025-05-14 11:21:05,132 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:21,060 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:23,621 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:23,621 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:27,276 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:29,895 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:29,895 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:38,965 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:41,625 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:41,625 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:51,149 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:53,498 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:22:53,498 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:23:02,222 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:23:04,911 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77] +2025-05-14 11:23:04,911 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:77]