"Refactor database connection for improved data consistency (feat"

This commit is contained in:
2025-05-10 23:01:22 +02:00
parent 74c2783b1a
commit 8440b7c30d
4 changed files with 54 additions and 9 deletions

Binary file not shown.

47
app.py
View File

@@ -2026,6 +2026,7 @@ def admin_update_database():
def get_mindmap_node(node_id):
"""Liefert die Mindmap-Daten für einen bestimmten Knoten und seine Subthemen."""
try:
# Erkennen besonderer Knotennamen
if node_id == 'root':
# Hauptknoten (Wissen) abrufen
wissen_node = MindMapNode.query.filter_by(name="Wissen").first()
@@ -2041,11 +2042,39 @@ def get_mindmap_node(node_id):
# Alle direkten Kinder des Wissen-Knotens holen
nodes = wissen_node.children.all()
else:
parent_node = wissen_node
elif node_id.isdigit():
# Bestimmten Knoten und seine Kinder abrufen
parent_node = MindMapNode.query.get_or_404(node_id)
parent_node = MindMapNode.query.get_or_404(int(node_id))
nodes = parent_node.children.all()
else:
# Versuche, einen Knoten mit diesem Namen zu finden
parent_node = MindMapNode.query.filter_by(name=node_id.capitalize()).first()
if not parent_node:
# Versuche, eine Kategorie mit diesem Namen zu finden
category = Category.query.filter(func.lower(Category.name) == func.lower(node_id)).first()
if category:
# Finde oder erstelle einen Knoten für diese Kategorie
parent_node = MindMapNode.query.filter_by(category_id=category.id).first()
if not parent_node:
parent_node = MindMapNode(
name=category.name,
description=category.description,
color_code=category.color_code,
category_id=category.id,
is_public=True
)
db.session.add(parent_node)
db.session.commit()
if not parent_node:
# Fallback zum Wissen-Knoten
parent_node = MindMapNode.query.filter_by(name="Wissen").first()
if not parent_node:
return jsonify({'error': 'Knoten nicht gefunden'}), 404
nodes = parent_node.children.all()
wissen_node = parent_node
# Ergebnisdaten vorbereiten
nodes_data = []
@@ -2053,10 +2082,10 @@ def get_mindmap_node(node_id):
# Hauptknoten hinzufügen
nodes_data.append({
'id': wissen_node.id,
'name': wissen_node.name,
'description': wissen_node.description or '',
'color_code': wissen_node.color_code or '#4299E1',
'id': parent_node.id,
'name': parent_node.name,
'description': parent_node.description or '',
'color_code': parent_node.color_code or '#4299E1',
'is_center': True,
'has_children': len(nodes) > 0
})
@@ -2074,7 +2103,7 @@ def get_mindmap_node(node_id):
# Verbindung zum Elternknoten hinzufügen
edges_data.append({
'source_id': wissen_node.id,
'source_id': parent_node.id,
'target_id': node.id,
'strength': 0.8
})
@@ -2086,6 +2115,8 @@ def get_mindmap_node(node_id):
except Exception as e:
print(f"Fehler beim Abrufen der Mindmap-Daten: {str(e)}")
import traceback
traceback.print_exc()
return jsonify({
'success': False,
'error': 'Mindmap-Daten konnten nicht geladen werden'

View File

@@ -11,19 +11,33 @@ import importlib.util
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)
from app import app, db_path
# Direkt den Datenbankpfad berechnen, statt ihn aus app.py zu importieren
def get_db_path():
"""Berechnet den absoluten Pfad zur Datenbank"""
basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
return os.path.join(basedir, 'database', 'systades.db')
# Import models direkt
from models import db
def ensure_db_dir():
"""Make sure the database directory exists."""
db_path = get_db_path()
os.makedirs(os.path.dirname(db_path), exist_ok=True)
def fix_database_schema():
"""Fix the database schema by adding missing columns."""
# Import Flask-App erst innerhalb der Funktion
from flask import Flask
from app import app
with app.app_context():
# Ensure directory exists
ensure_db_dir()
# Get database path
db_path = get_db_path()
# Check if database exists, create tables if needed
if not os.path.exists(db_path):
print("Database doesn't exist. Creating all tables from scratch...")