64 lines
2.5 KiB
Python
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)
|