Refactor database initialization: streamline the process by removing the old init_database function, implementing a new structure for database setup, and ensuring the creation of a comprehensive mindmap hierarchy with an admin user. Update app.py to run on port 5000 instead of 6000.

This commit is contained in:
2025-04-21 18:43:58 +01:00
parent b6bf9f387d
commit 9f8eba6736
12 changed files with 210 additions and 107 deletions

View File

@@ -1,88 +1,144 @@
from app import app, db, User, MindMapNode
import os
import sys
from pathlib import Path
import shutil
def init_database():
"""Initialize the database with admin user and mindmap structure."""
with app.app_context():
# Create all tables
db.create_all()
# Check if we already have users
if User.query.first() is None:
print("Creating admin user...")
# Create admin user
admin = User(username='admin', email='admin@example.com', is_admin=True)
admin.set_password('admin123')
db.session.add(admin)
# Create regular test user
test_user = User(username='test', email='test@example.com', is_admin=False)
test_user.set_password('test123')
db.session.add(test_user)
db.session.commit()
print("Admin user created successfully!")
# Check if we already have mindmap nodes
if MindMapNode.query.first() is None:
print("Creating initial mindmap structure...")
# Create initial mindmap structure
root = MindMapNode(name="Wissenschaftliche Mindmap")
db.session.add(root)
# Level 1 nodes
node1 = MindMapNode(name="Naturwissenschaften", parent=root)
node2 = MindMapNode(name="Geisteswissenschaften", parent=root)
node3 = MindMapNode(name="Technologie", parent=root)
node4 = MindMapNode(name="Künste", parent=root)
db.session.add_all([node1, node2, node3, node4])
# Level 2 nodes - Naturwissenschaften
node1_1 = MindMapNode(name="Physik", parent=node1)
node1_2 = MindMapNode(name="Biologie", parent=node1)
node1_3 = MindMapNode(name="Chemie", parent=node1)
node1_4 = MindMapNode(name="Astronomie", parent=node1)
db.session.add_all([node1_1, node1_2, node1_3, node1_4])
# Level 2 nodes - Geisteswissenschaften
node2_1 = MindMapNode(name="Philosophie", parent=node2)
node2_2 = MindMapNode(name="Geschichte", parent=node2)
node2_3 = MindMapNode(name="Psychologie", parent=node2)
node2_4 = MindMapNode(name="Soziologie", parent=node2)
db.session.add_all([node2_1, node2_2, node2_3, node2_4])
# Level 2 nodes - Technologie
node3_1 = MindMapNode(name="Informatik", parent=node3)
node3_2 = MindMapNode(name="Biotechnologie", parent=node3)
node3_3 = MindMapNode(name="Künstliche Intelligenz", parent=node3)
node3_4 = MindMapNode(name="Energietechnik", parent=node3)
db.session.add_all([node3_1, node3_2, node3_3, node3_4])
# Level 2 nodes - Künste
node4_1 = MindMapNode(name="Bildende Kunst", parent=node4)
node4_2 = MindMapNode(name="Musik", parent=node4)
node4_3 = MindMapNode(name="Literatur", parent=node4)
node4_4 = MindMapNode(name="Film", parent=node4)
db.session.add_all([node4_1, node4_2, node4_3, node4_4])
# Level 3 nodes - a few examples
# Physik
MindMapNode(name="Quantenphysik", parent=node1_1)
MindMapNode(name="Relativitätstheorie", parent=node1_1)
# Informatik
MindMapNode(name="Maschinelles Lernen", parent=node3_1)
MindMapNode(name="Softwareentwicklung", parent=node3_1)
MindMapNode(name="Datenbanken", parent=node3_1)
# Commit changes
db.session.commit()
print("Mindmap structure created successfully!")
print("Database initialization complete.")
# Pfade zu möglichen Datenbankdateien
db_paths = [
Path("instance/mindmap.db"),
Path("mindmap.db"),
Path("website/instance/mindmap.db"),
Path("website/mindmap.db")
]
if __name__ == "__main__":
init_database()
print("You can now run the application with 'python app.py'")
print("Login with:")
print(" Admin: username=admin, password=admin123")
print(" User: username=test, password=test123")
# Lösche bestehende Datenbankdateien
for db_path in db_paths:
if db_path.exists():
try:
print(f"Lösche Datenbank: {db_path}")
os.remove(db_path)
except Exception as e:
print(f"Fehler beim Löschen von {db_path}: {e}")
# Stelle sicher, dass das instance-Verzeichnis existiert
instance_dir = Path("instance")
if not instance_dir.exists():
os.makedirs(instance_dir)
# Importiere Datenbankmodelle und erstelle die Datenbank
from app import db, create_app, User, MindMapNode, Thought, Comment
app = create_app()
with app.app_context():
print("Erstelle neue Datenbank...")
db.drop_all() # Stelle sicher, dass alle Tabellen gelöscht sind
db.create_all() # Erstelle Tabellen basierend auf den Modellen
# Erstelle einen Admin-Benutzer
admin = User(username="admin", email="admin@example.com", is_admin=True)
admin.set_password("admin123")
db.session.add(admin)
# Erstelle Root-Node
root = MindMapNode(name="Wissenschaft")
db.session.add(root)
# Hauptkategorien erstellen
naturwissenschaften = MindMapNode(name="Naturwissenschaften", parent=root)
geisteswissenschaften = MindMapNode(name="Geisteswissenschaften", parent=root)
sozialwissenschaften = MindMapNode(name="Sozialwissenschaften", parent=root)
ingenieurwissenschaften = MindMapNode(name="Ingenieurwissenschaften", parent=root)
medizin = MindMapNode(name="Medizin", parent=root)
informatik = MindMapNode(name="Informatik", parent=root)
db.session.add_all([naturwissenschaften, geisteswissenschaften, sozialwissenschaften,
ingenieurwissenschaften, medizin, informatik])
# Unterkategorien für Naturwissenschaften
physik = MindMapNode(name="Physik", parent=naturwissenschaften)
chemie = MindMapNode(name="Chemie", parent=naturwissenschaften)
biologie = MindMapNode(name="Biologie", parent=naturwissenschaften)
astronomie = MindMapNode(name="Astronomie", parent=naturwissenschaften)
geologie = MindMapNode(name="Geologie", parent=naturwissenschaften)
# Unterkategorien für Physik
quantenphysik = MindMapNode(name="Quantenphysik", parent=physik)
relativitätstheorie = MindMapNode(name="Relativitätstheorie", parent=physik)
thermodynamik = MindMapNode(name="Thermodynamik", parent=physik)
# Unterkategorien für Geisteswissenschaften
philosophie = MindMapNode(name="Philosophie", parent=geisteswissenschaften)
geschichte = MindMapNode(name="Geschichte", parent=geisteswissenschaften)
linguistik = MindMapNode(name="Linguistik", parent=geisteswissenschaften)
literaturwissenschaft = MindMapNode(name="Literaturwissenschaft", parent=geisteswissenschaften)
religionswissenschaft = MindMapNode(name="Religionswissenschaft", parent=geisteswissenschaften)
# Unterkategorien für Sozialwissenschaften
soziologie = MindMapNode(name="Soziologie", parent=sozialwissenschaften)
psychologie = MindMapNode(name="Psychologie", parent=sozialwissenschaften)
politikwissenschaft = MindMapNode(name="Politikwissenschaft", parent=sozialwissenschaften)
wirtschaftswissenschaften = MindMapNode(name="Wirtschaftswissenschaften", parent=sozialwissenschaften)
# Unterkategorien für Ingenieurwissenschaften
maschinenbau = MindMapNode(name="Maschinenbau", parent=ingenieurwissenschaften)
elektrotechnik = MindMapNode(name="Elektrotechnik", parent=ingenieurwissenschaften)
bauingenieurwesen = MindMapNode(name="Bauingenieurwesen", parent=ingenieurwissenschaften)
verfahrenstechnik = MindMapNode(name="Verfahrenstechnik", parent=ingenieurwissenschaften)
# Unterkategorien für Medizin
humanmedizin = MindMapNode(name="Humanmedizin", parent=medizin)
zahnmedizin = MindMapNode(name="Zahnmedizin", parent=medizin)
pharmazie = MindMapNode(name="Pharmazie", parent=medizin)
neurologie = MindMapNode(name="Neurologie", parent=medizin)
onkologie = MindMapNode(name="Onkologie", parent=medizin)
# Unterkategorien für Informatik
künstliche_intelligenz = MindMapNode(name="Künstliche Intelligenz", parent=informatik)
datenbanken = MindMapNode(name="Datenbanken", parent=informatik)
softwareentwicklung = MindMapNode(name="Softwareentwicklung", parent=informatik)
computergrafik = MindMapNode(name="Computergrafik", parent=informatik)
cybersicherheit = MindMapNode(name="Cybersicherheit", parent=informatik)
# Alle Nodes zur Session hinzufügen
all_nodes = [physik, chemie, biologie, astronomie, geologie,
quantenphysik, relativitätstheorie, thermodynamik,
philosophie, geschichte, linguistik, literaturwissenschaft, religionswissenschaft,
soziologie, psychologie, politikwissenschaft, wirtschaftswissenschaften,
maschinenbau, elektrotechnik, bauingenieurwesen, verfahrenstechnik,
humanmedizin, zahnmedizin, pharmazie, neurologie, onkologie,
künstliche_intelligenz, datenbanken, softwareentwicklung, computergrafik, cybersicherheit]
db.session.add_all(all_nodes)
# Füge einen Beispiel-Gedanken hinzu
thought = Thought(
content="Dies ist ein Beispiel-Gedanke zur Wissenschaft allgemein.",
branch="Wissenschaft",
user_id=1 # Admin-Benutzer
)
db.session.add(thought)
root.thoughts.append(thought)
# Füge weitere Beispiel-Gedanken hinzu
thought_ai = Thought(
content="Künstliche Intelligenz transformiert viele Bereiche der Wissenschaft und Gesellschaft.",
branch="Künstliche Intelligenz",
user_id=1
)
db.session.add(thought_ai)
künstliche_intelligenz.thoughts.append(thought_ai)
thought_physik = Thought(
content="Die Quantenphysik stellt unser Verständnis der Realität grundlegend in Frage.",
branch="Quantenphysik",
user_id=1
)
db.session.add(thought_physik)
quantenphysik.thoughts.append(thought_physik)
db.session.commit()
print("Datenbank wurde erfolgreich initialisiert!")
print(f"Admin-Benutzer erstellt: admin/admin123")
print(f"Root-Node 'Wissenschaft' erstellt mit mehreren Hauptkategorien und Unterkategorien")