"feat: Add database backup script
This commit is contained in:
@@ -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):
|
||||
|
Reference in New Issue
Block a user