You've already forked agentic-coding-workflow
feat(workspace): migration 0003 + errs codes for workspace/worktree/git
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
-- ============ Workspaces ============
|
||||
CREATE TABLE workspaces (
|
||||
id UUID PRIMARY KEY,
|
||||
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||
slug TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
git_remote_url TEXT NOT NULL,
|
||||
default_branch TEXT NOT NULL DEFAULT 'main',
|
||||
main_path TEXT NOT NULL,
|
||||
sync_status TEXT NOT NULL DEFAULT 'cloning',
|
||||
last_synced_at TIMESTAMPTZ,
|
||||
last_sync_error TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT workspaces_sync_status_check CHECK (sync_status IN ('cloning','idle','syncing','error')),
|
||||
UNIQUE (project_id, slug),
|
||||
UNIQUE (project_id, id)
|
||||
);
|
||||
CREATE INDEX idx_workspaces_project ON workspaces(project_id);
|
||||
|
||||
-- ============ Worktrees ============
|
||||
CREATE TABLE workspace_worktrees (
|
||||
id UUID PRIMARY KEY,
|
||||
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
||||
branch TEXT NOT NULL,
|
||||
path TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'idle',
|
||||
active_holder TEXT,
|
||||
acquired_at TIMESTAMPTZ,
|
||||
last_used_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT worktrees_status_check CHECK (status IN ('idle','active','pruning')),
|
||||
UNIQUE (workspace_id, branch),
|
||||
UNIQUE (workspace_id, path)
|
||||
);
|
||||
CREATE INDEX idx_worktrees_ws_status ON workspace_worktrees(workspace_id, status, last_used_at);
|
||||
|
||||
-- ============ Git credentials ============
|
||||
CREATE TABLE git_credentials (
|
||||
id UUID PRIMARY KEY,
|
||||
workspace_id UUID NOT NULL UNIQUE REFERENCES workspaces(id) ON DELETE CASCADE,
|
||||
kind TEXT NOT NULL,
|
||||
username TEXT,
|
||||
encrypted_secret BYTEA,
|
||||
fingerprint TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT git_credentials_kind_check CHECK (kind IN ('pat','ssh_key','none'))
|
||||
);
|
||||
|
||||
-- ============ ALTER existing PM tables ============
|
||||
ALTER TABLE issues ADD COLUMN workspace_id UUID NULL;
|
||||
ALTER TABLE issues ADD CONSTRAINT issues_project_workspace_fk
|
||||
FOREIGN KEY (project_id, workspace_id)
|
||||
REFERENCES workspaces (project_id, id) MATCH SIMPLE
|
||||
ON DELETE SET NULL;
|
||||
CREATE INDEX idx_issues_workspace_status ON issues(workspace_id, status);
|
||||
|
||||
ALTER TABLE requirements ADD COLUMN workspace_id UUID NULL
|
||||
REFERENCES workspaces(id) ON DELETE SET NULL;
|
||||
CREATE INDEX idx_requirements_workspace ON requirements(workspace_id);
|
||||
Reference in New Issue
Block a user