From 41195a44cbe24d9e41b4502f318aaf34ade09e20 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 10 May 2025 22:20:49 +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 90093 -> 89669 bytes app.py | 194 +++++--------------------------- database/systades.db | Bin 131072 -> 131072 bytes 3 files changed, 30 insertions(+), 164 deletions(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 1904069754a4c6ebbd915ee78cdf5f7f11ff6cf8..2cb22aa82bc8f7a76263d65545ccdd5ffd883a6e 100644 GIT binary patch delta 11295 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 delta 11568 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 diff --git a/app.py b/app.py index 235b4f6..2b712f8 100644 --- a/app.py +++ b/app.py @@ -149,169 +149,6 @@ def create_default_users(): db.session.commit() print(f"{len(users)} Benutzer wurden erstellt.") -def create_default_categories(): - """Erstellt die Standardkategorien für die Mindmap""" - # Hauptkategorien - main_categories = [ - { - "name": "Philosophie", -# Automatische Datenbankinitialisierung - Aktualisiert für Flask 2.2+ Kompatibilität -def initialize_app(): - """Initialisierung der Anwendung""" - print("Initialisierung der Anwendung...") - with app.app_context(): - # Prüfen, ob die Datenbank existiert und initialisiert ist - try: - # Prüfen, ob Tabellen existieren - db.create_all() - - # Prüfen, ob Stammdaten vorhanden sind - if User.query.count() == 0: - print("Erstelle Standardbenutzer...") - create_default_users() - - if Category.query.count() == 0: - print("Erstelle Standardkategorien...") - create_default_categories() - - if MindMapNode.query.count() == 0 and Category.query.count() > 0: - print("Erstelle Beispiel-Mindmap...") - create_sample_mindmap() - - print("Datenbank wurde erfolgreich initialisiert.") - except Exception as e: - import traceback - print(f"Fehler bei der Datenbankinitialisierung: {e}") - print(traceback.format_exc()) - -# Moderne Methode für die Datenbankinitialisierung in Flask 2.2+ -with app.app_context(): - initialize_app() - -def create_sample_mindmap(): - """Erstellt eine Beispiel-Mindmap mit Knoten und Beziehungen""" - - # Kategorien für die Zuordnung - categories = Category.query.all() - category_map = {cat.name: cat for cat in categories} - - # Beispielknoten erstellen - nodes = [ - { - 'name': 'Wissensmanagement', - 'description': 'Systematische Erfassung, Speicherung und Nutzung von Wissen in Organisationen.', - 'color_code': '#6366f1', - 'icon': 'database', - 'category': category_map.get('Philosophie'), - 'x': 0, - 'y': 0 - }, - { - 'name': 'Mind-Mapping', - 'description': 'Technik zur visuellen Darstellung von Informationen und Zusammenhängen.', - 'color_code': '#10b981', - 'icon': 'git-branch', - 'category': category_map.get('Technologie'), - 'x': 200, - 'y': -150 - }, - { - 'name': 'Cytoscape.js', - 'description': 'JavaScript-Bibliothek für die Visualisierung und Manipulation von Graphen.', - 'color_code': '#3b82f6', - 'icon': 'code', - 'category': category_map.get('Technologie'), - 'x': 350, - 'y': -50 - }, - { - 'name': 'Socket.IO', - 'description': 'Bibliothek für Echtzeit-Kommunikation zwischen Client und Server.', - 'color_code': '#3b82f6', - 'icon': 'zap', - 'category': category_map.get('Technologie'), - 'x': 350, - 'y': 100 - }, - { - 'name': 'Kollaboration', - 'description': 'Zusammenarbeit mehrerer Benutzer an gemeinsamen Inhalten.', - 'color_code': '#f59e0b', - 'icon': 'users', - 'category': category_map.get('Psychologie'), - 'x': 200, - 'y': 150 - }, - { - 'name': 'SQLite', - 'description': 'Leichtgewichtige relationale Datenbank, die ohne Server-Prozess auskommt.', - 'color_code': '#3b82f6', - 'icon': 'database', - 'category': category_map.get('Technologie'), - 'x': 0, - 'y': 200 - }, - { - 'name': 'Flask', - 'description': 'Leichtgewichtiges Python-Webframework für die Entwicklung von Webanwendungen.', - 'color_code': '#3b82f6', - 'icon': 'server', - 'category': category_map.get('Technologie'), - 'x': -200, - 'y': 150 - }, - { - 'name': 'REST API', - 'description': 'Architekturstil für verteilte Systeme, insbesondere Webanwendungen.', - 'color_code': '#10b981', - 'icon': 'link', - 'category': category_map.get('Wissenschaft'), - 'x': -200, - 'y': -150 - } - ] - - # Erstelle einen zentralen "Wissen"-Knoten - wissen_node = MindMapNode.query.filter_by(name="Wissen").first() - if not wissen_node: - wissen_node = MindMapNode( - name="Wissen", - description="Zentrale Wissensbasis", - color_code="#4299E1", - icon="brain", - is_public=True - ) - db.session.add(wissen_node) - db.session.flush() - - # Erstelle die Knoten und verbinde sie mit dem Wissen-Knoten - created_nodes = [] - for node_data in nodes: - node = MindMapNode( - name=node_data['name'], - description=node_data['description'], - color_code=node_data['color_code'], - icon=node_data.get('icon', 'circle'), - is_public=True, - category=node_data.get('category') - ) - db.session.add(node) - db.session.flush() - - # Verbinde mit dem Wissen-Knoten - wissen_node.children.append(node) - created_nodes.append(node) - - # Erstelle einige Verbindungen zwischen den Knoten - if len(created_nodes) >= 2: - # Verbinde einige Knoten miteinander - created_nodes[0].children.append(created_nodes[1]) # Wissensmanagement -> Mind-Mapping - if len(created_nodes) >= 3: - created_nodes[1].children.append(created_nodes[2]) # Mind-Mapping -> Cytoscape.js - - db.session.commit() - print("Beispiel-Mindmap wurde erstellt!") - def create_default_categories(): """Erstellt die Standardkategorien für die Mindmap""" # Hauptkategorien @@ -2130,4 +1967,33 @@ def get_mindmap_node(node_id): return jsonify({ 'success': False, 'error': 'Mindmap-Daten konnten nicht geladen werden' - }), 500 \ No newline at end of file + }), 500 + +# Automatische Datenbankinitialisierung - Aktualisiert für Flask 2.2+ Kompatibilität +def initialize_app(): + """Initialisierung der Anwendung""" + print("Initialisierung der Anwendung...") + with app.app_context(): + # Prüfen, ob die Datenbank existiert und initialisiert ist + try: + # Prüfen, ob Tabellen existieren + db.create_all() + + # Prüfen, ob Stammdaten vorhanden sind + if User.query.count() == 0: + print("Erstelle Standardbenutzer...") + create_default_users() + + # Wir nutzen die initialize_database Funktion für Kategorien und Mindmap + # Diese Funktionalität ist bereits dort implementiert + initialize_database() + + print("Datenbank wurde erfolgreich initialisiert.") + except Exception as e: + import traceback + print(f"Fehler bei der Datenbankinitialisierung: {e}") + print(traceback.format_exc()) + +# Moderne Methode für die Datenbankinitialisierung in Flask 2.2+ +with app.app_context(): + initialize_app() \ No newline at end of file diff --git a/database/systades.db b/database/systades.db index 0c2eac24c27370a82185c353d44f277ee36a6742..8777027ce1e8f6319e8457dfbc44a509212fca76 100644 GIT binary patch delta 1798 zcmZ`(&u<$=6yEJN-T2pTel#uB5_O{}MO85&P13{!sd8&KM2R6)s)iek*U#Qz*E814 zEK$P2IU#WZ{s9iCH%_!tLA2tM0~e(J1-(_`02j_2%A0kXb&8O3n04lT^S$?d-#a`U zJv7v5v4{Eo+LUcvt9YKd4MHA0W-$%I2&lRp5|HYq0(#Kha@ZR7HsH*MCtTv5(|twa0hX&B2rh*fqu1R~VL@+96~!P}d>!>GPr zgFcIZ`3Y*lcF9li$ zDu><5*KRCTZ(y4}B%sPo zk;u@wGG-eWXOMp*ku=(j3F|}%p|aau{72v{xY*|cj&zIS{D?}#P7n&(Rw-S77eoZF zYWk$yXhlO+`tJI4RF+B3mK}BAhXmr@6+U6s(kNV`jy> zY}R9ll;Dg;CnwYq{GEM#psOjYR{D#&%Pw@e*w3#NaYT#S3xan9>2@iIgmrd!TkR16 zIK@30L^1x9)~2NaZ$Z9Ru#L5fRyJin=yQW9u4w6sLgXqQSH z8=|43{eBCCUnA(9&rvGTMCa@FmR4`wT3N-(#H6QqudKTqd2bZ4mc6&k22mlTSkgc*5N9FRCjVxqVhS+Z?odd<6p?i=)V%%VS_(Lxt*K@(|Z)h$Lw*3Q|+ zrA@6!xR0J&2MOu`d`%ijfS{1Nqs~BJD6(37vpdolv5mRFn>L0!9zLT^ee^?($^+Vq zwInIp9WHP>r^e8ZiHzPqYa8?P-dwJZ24+k#%vlH=NqneHj;y4A3_n}Bvr?^B^#Exn zRLvxAu3DI$MQGs^mxLv<; z`jghR*B9$l$--#9+L!0`*U3Jdbgfx)XvZo%@7;|Gpo z&7|q?58_|aFsCzJ^sKf2OKU;1$Z`jH4VUF7r$4g@j25lw6Ia`L>(a4T&y87gADF{- y8=11^&Hs4ktZpdvgr!fZ#Ah69HkZi+rAOxW%TK=F_6L6tx6QGi%y-R~&;A7jBtwY+ delta 30 mcmZo@;Am*zm>|t4I#I@%QFLR%68p_88~*4w6)Y=YoB#lt&