diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 34f8dda..bfd59e4 100644 Binary files a/__pycache__/app.cpython-313.pyc and b/__pycache__/app.cpython-313.pyc differ 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]