#!/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)