bmc_hub/run_migration.py
Christian 3d7fb1aa48 feat(migrations): add AnyDesk session management and customer wiki slug updates
- Created migration scripts for AnyDesk sessions and hardware assets.
- Implemented apply_migration_115.py to execute migration for AnyDesk sessions.
- Added set_customer_wiki_slugs.py script to update customer wiki slugs based on a predefined folder list.
- Developed run_migration.py to apply AnyDesk migration schema.
- Added tests for Service Contract Wizard to ensure functionality and dry-run mode.
2026-02-10 14:40:38 +01:00

64 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""
Simple migration runner - applies anydesk_sessions schema
"""
import psycopg2
import sys
sql_statements = [
"""
CREATE TABLE IF NOT EXISTS anydesk_sessions (
id SERIAL PRIMARY KEY,
anydesk_session_id VARCHAR(255) UNIQUE NOT NULL,
contact_id INTEGER REFERENCES contacts(id) ON DELETE SET NULL,
customer_id INTEGER REFERENCES customers(id) ON DELETE SET NULL,
sag_id INTEGER REFERENCES sag_sager(id) ON DELETE SET NULL,
session_link TEXT,
device_info JSONB DEFAULT '{}',
created_by_user_id INTEGER REFERENCES users(user_id) ON DELETE SET NULL,
started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
ended_at TIMESTAMP WITH TIME ZONE,
duration_minutes INTEGER,
status VARCHAR(50) NOT NULL DEFAULT 'draft',
error_message TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
metadata JSONB DEFAULT '{}'
)
""",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_contact_id ON anydesk_sessions(contact_id)",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_customer_id ON anydesk_sessions(customer_id)",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_sag_id ON anydesk_sessions(sag_id)",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_created_by_user_id ON anydesk_sessions(created_by_user_id)",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_status ON anydesk_sessions(status)",
"CREATE INDEX IF NOT EXISTS idx_anydesk_sessions_started_at ON anydesk_sessions(started_at DESC)",
]
try:
# Connect to database
conn = psycopg2.connect("postgresql://bmc_hub:bmc_hub@localhost:5433/bmc_hub")
cursor = conn.cursor()
print("Applying AnyDesk migration...")
for i, statement in enumerate(sql_statements, 1):
preview = statement.replace('\n', ' ')[:80]
print(f" [{i}/{len(sql_statements)}] {preview}...")
cursor.execute(statement)
conn.commit()
print("✅ All statements executed successfully")
# Verify
cursor.execute("SELECT COUNT(*) as count FROM information_schema.tables WHERE table_name = 'anydesk_sessions'")
result = cursor.fetchone()
if result[0] > 0:
print("✅ anydesk_sessions table verified")
cursor.close()
conn.close()
except Exception as e:
print(f"❌ Error: {e}", file=sys.stderr)
sys.exit(1)