-- BoosAPI Workflow Studio core tables. CREATE TABLE IF NOT EXISTS workflows ( id INTEGER PRIMARY KEY AUTOINCREMENT, public_id TEXT NOT NULL UNIQUE, user_id INTEGER, name TEXT NOT NULL, description TEXT, graph TEXT NOT NULL DEFAULT '{}', is_template INTEGER NOT NULL DEFAULT 0, visibility TEXT NOT NULL DEFAULT 'private', created_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')), deleted_at TEXT, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS idx_workflows_user_updated ON workflows(user_id, updated_at DESC); CREATE INDEX IF NOT EXISTS idx_workflows_visibility ON workflows(visibility); CREATE INDEX IF NOT EXISTS idx_workflows_deleted ON workflows(deleted_at); CREATE TABLE IF NOT EXISTS workflow_runs ( id INTEGER PRIMARY KEY AUTOINCREMENT, public_id TEXT NOT NULL UNIQUE, workflow_id INTEGER NOT NULL, user_id INTEGER, status TEXT NOT NULL, input_overrides TEXT NOT NULL DEFAULT '{}', final_outputs TEXT, error_message TEXT, started_at TEXT, completed_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')), FOREIGN KEY(workflow_id) REFERENCES workflows(id) ON DELETE CASCADE, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS idx_workflow_runs_workflow_created ON workflow_runs(workflow_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_workflow_runs_user_created ON workflow_runs(user_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_workflow_runs_status ON workflow_runs(status); CREATE TABLE IF NOT EXISTS workflow_node_runs ( id INTEGER PRIMARY KEY AUTOINCREMENT, run_id INTEGER NOT NULL, node_id TEXT NOT NULL, node_type TEXT NOT NULL, status TEXT NOT NULL, inputs TEXT NOT NULL DEFAULT '{}', outputs TEXT, error_message TEXT, started_at TEXT, completed_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')), FOREIGN KEY(run_id) REFERENCES workflow_runs(id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_workflow_node_runs_run ON workflow_node_runs(run_id, id);