83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
#!/usr/bin/env python3.11
|
|
"""
|
|
Migrations-Skript für Benutzereinstellungen
|
|
Fügt neue Spalten zur users-Tabelle hinzu für erweiterte Benutzereinstellungen.
|
|
|
|
Autor: MYP Team
|
|
Datum: 2025-06-09
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from sqlalchemy import text, inspect
|
|
from models import get_db_session, engine
|
|
from utils.logging_config import get_logger
|
|
|
|
logger = get_logger("migration")
|
|
|
|
def check_column_exists(table_name: str, column_name: str) -> bool:
|
|
"""Prüft, ob eine Spalte in einer Tabelle existiert"""
|
|
try:
|
|
inspector = inspect(engine)
|
|
columns = [col['name'] for col in inspector.get_columns(table_name)]
|
|
return column_name in columns
|
|
except Exception as e:
|
|
logger.error(f"Fehler beim Prüfen der Spalte {column_name}: {e}")
|
|
return False
|
|
|
|
def add_user_settings_columns():
|
|
"""Fügt die neuen Benutzereinstellungs-Spalten hinzu"""
|
|
session = get_db_session()
|
|
|
|
# Neue Spalten definieren
|
|
new_columns = [
|
|
("theme_preference", "VARCHAR(20) DEFAULT 'auto'"),
|
|
("language_preference", "VARCHAR(10) DEFAULT 'de'"),
|
|
("email_notifications", "BOOLEAN DEFAULT 1"),
|
|
("browser_notifications", "BOOLEAN DEFAULT 1"),
|
|
("dashboard_layout", "VARCHAR(20) DEFAULT 'default'"),
|
|
("compact_mode", "BOOLEAN DEFAULT 0"),
|
|
("show_completed_jobs", "BOOLEAN DEFAULT 1"),
|
|
("auto_refresh_interval", "INTEGER DEFAULT 30"),
|
|
("auto_logout_timeout", "INTEGER DEFAULT 0")
|
|
]
|
|
|
|
try:
|
|
for column_name, column_definition in new_columns:
|
|
if not check_column_exists('users', column_name):
|
|
logger.info(f"Füge Spalte {column_name} zur users-Tabelle hinzu...")
|
|
|
|
# SQLite-kompatible ALTER TABLE Syntax
|
|
sql = f"ALTER TABLE users ADD COLUMN {column_name} {column_definition}"
|
|
session.execute(text(sql))
|
|
session.commit()
|
|
|
|
logger.info(f"Spalte {column_name} erfolgreich hinzugefügt")
|
|
else:
|
|
logger.info(f"Spalte {column_name} existiert bereits")
|
|
|
|
logger.info("Migration der Benutzereinstellungen erfolgreich abgeschlossen")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Fehler bei der Migration: {e}")
|
|
session.rollback()
|
|
raise e
|
|
finally:
|
|
session.close()
|
|
|
|
def main():
|
|
"""Hauptfunktion für die Migration"""
|
|
try:
|
|
logger.info("Starte Migration der Benutzereinstellungen...")
|
|
add_user_settings_columns()
|
|
logger.info("Migration erfolgreich abgeschlossen")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Migration fehlgeschlagen: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
success = main()
|
|
sys.exit(0 if success else 1) |