from app.db.database import get_connection def run_migrations(): con = get_connection() con.execute( """ CREATE TABLE IF NOT EXISTS jobs ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, target_type TEXT NOT NULL, target_id TEXT NOT NULL, payload_json TEXT NOT NULL DEFAULT '{}', status TEXT NOT NULL DEFAULT 'queued', created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, started_at TEXT, finished_at TEXT, created_by_user_id INTEGER, created_by_username TEXT, created_by_display_name TEXT, source TEXT NOT NULL DEFAULT 'portal', worker_id TEXT, result_json TEXT, error_text TEXT ) """ ) con.execute( """ CREATE TABLE IF NOT EXISTS job_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, job_id INTEGER NOT NULL, stream TEXT NOT NULL, message TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(job_id) REFERENCES jobs(id) ) """ ) con.execute( """ CREATE TABLE IF NOT EXISTS workers ( worker_id TEXT PRIMARY KEY, status TEXT, last_seen_at TEXT, current_job_id INTEGER, started_at TEXT, metadata_json TEXT ) """ ) con.execute("CREATE INDEX IF NOT EXISTS idx_jobs_status_created ON jobs(status, created_at)") con.execute("CREATE INDEX IF NOT EXISTS idx_jobs_target_status ON jobs(target_type, target_id, status)") con.execute("CREATE INDEX IF NOT EXISTS idx_job_logs_job_id ON job_logs(job_id, id)") con.execute("CREATE INDEX IF NOT EXISTS idx_workers_last_seen ON workers(last_seen_at)") try: con.execute("ALTER TABLE jobs ADD COLUMN created_by_display_name TEXT") except Exception: pass try: con.execute("ALTER TABLE deployments ADD COLUMN job_id INTEGER") except Exception: pass con.commit() con.close()