Files
Projektarbeit-MYP/backend/utils/migrate_user_settings.py

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)