package database import "context" func (db *DB) migrate() error { _, err := db.Pool.Exec(context.Background(), ` CREATE TABLE IF NOT EXISTS tasks ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), parent_task_id UUID REFERENCES tasks(id), command TEXT NOT NULL, skill TEXT NOT NULL DEFAULT '', repository TEXT NOT NULL, ref TEXT NOT NULL, issue_number INTEGER NOT NULL DEFAULT 0, pr_number INTEGER NOT NULL DEFAULT 0, comment_id BIGINT NOT NULL DEFAULT 0, body TEXT NOT NULL DEFAULT '', author TEXT NOT NULL, extra_tools TEXT[] NOT NULL DEFAULT '{}', status TEXT NOT NULL DEFAULT 'todo', pool_ref TEXT NOT NULL DEFAULT '', job_name TEXT NOT NULL DEFAULT '', result TEXT NOT NULL DEFAULT '', error_message TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), started_at TIMESTAMPTZ, completed_at TIMESTAMPTZ ); CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status); CREATE INDEX IF NOT EXISTS idx_tasks_repository ON tasks(repository); CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_task_id); -- migrate legacy statuses UPDATE tasks SET status = 'todo' WHERE status IN ('pending', 'failed'); UPDATE tasks SET status = 'in_progress' WHERE status = 'running'; UPDATE tasks SET status = 'done' WHERE status = 'succeeded'; UPDATE tasks SET status = 'wontdo' WHERE status = 'cancelled'; `) return err }