"feat: Add database backup script

This commit is contained in:
2025-05-29 18:23:25 +02:00
parent e464fb9587
commit deda6d6c38
4 changed files with 958 additions and 3 deletions

View File

@@ -174,12 +174,35 @@ def migrate_guest_requests_table(cursor):
existing_columns = get_table_columns(cursor, 'guest_requests')
# Vollständige Definition aller erwarteten Spalten basierend auf dem GuestRequest Modell
required_columns = {
'id': 'INTEGER PRIMARY KEY',
'name': 'VARCHAR(100) NOT NULL',
'email': 'VARCHAR(120)',
'reason': 'TEXT',
'duration_min': 'INTEGER', # Bestehende Spalte für Backward-Kompatibilität
'duration_minutes': 'INTEGER', # Neue Spalte für API-Kompatibilität - HIER IST DAS PROBLEM!
'created_at': 'DATETIME DEFAULT CURRENT_TIMESTAMP',
'status': 'VARCHAR(20) DEFAULT "pending"',
'printer_id': 'INTEGER',
'otp_code': 'VARCHAR(100)',
'job_id': 'INTEGER',
'author_ip': 'VARCHAR(50)',
'otp_used_at': 'DATETIME',
'file_name': 'VARCHAR(255)',
'file_path': 'VARCHAR(500)',
'copies': 'INTEGER DEFAULT 1',
'processed_by': 'INTEGER',
'processed_at': 'DATETIME',
'approval_notes': 'TEXT',
'rejection_reason': 'TEXT',
'otp_used_at': 'DATETIME'
'updated_at': 'DATETIME DEFAULT CURRENT_TIMESTAMP',
'approved_at': 'DATETIME',
'rejected_at': 'DATETIME',
'approved_by': 'INTEGER',
'rejected_by': 'INTEGER',
'otp_expires_at': 'DATETIME',
'assigned_printer_id': 'INTEGER'
}
migrations_performed = []
@@ -187,12 +210,34 @@ def migrate_guest_requests_table(cursor):
for column_name, column_def in required_columns.items():
if column_name not in existing_columns:
try:
cursor.execute(f"ALTER TABLE guest_requests ADD COLUMN {column_name} {column_def}")
logger.info(f"Spalte '{column_name}' zu guest_requests hinzugefügt")
# Spezielle Behandlung für updated_at mit Trigger
if column_name == 'updated_at':
cursor.execute(f"ALTER TABLE guest_requests ADD COLUMN {column_name} {column_def}")
# Trigger für automatische Aktualisierung
cursor.execute("""
CREATE TRIGGER IF NOT EXISTS update_guest_requests_updated_at
AFTER UPDATE ON guest_requests
BEGIN
UPDATE guest_requests SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
END
""")
logger.info(f"Spalte '{column_name}' zu guest_requests hinzugefügt mit Auto-Update-Trigger")
else:
cursor.execute(f"ALTER TABLE guest_requests ADD COLUMN {column_name} {column_def}")
logger.info(f"Spalte '{column_name}' zu guest_requests hinzugefügt")
migrations_performed.append(column_name)
except Exception as e:
logger.error(f"Fehler beim Hinzufügen der Spalte '{column_name}' zu guest_requests: {str(e)}")
# Wenn duration_minutes hinzugefügt wurde, kopiere Werte von duration_min
if 'duration_minutes' in migrations_performed:
try:
cursor.execute("UPDATE guest_requests SET duration_minutes = duration_min WHERE duration_minutes IS NULL")
logger.info("Werte von duration_min zu duration_minutes kopiert")
except Exception as e:
logger.error(f"Fehler beim Kopieren der duration_min Werte: {str(e)}")
return len(migrations_performed) > 0
def create_missing_tables(cursor):