77 lines
3.6 KiB
SQL
77 lines
3.6 KiB
SQL
-- 006: PR Reviews, Branch Protection, Fork enhancements
|
|
|
|
CREATE TABLE IF NOT EXISTS pr_review (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
pull_request_id UUID NOT NULL REFERENCES pull_request(id) ON DELETE CASCADE,
|
|
author_id UUID NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
|
|
state TEXT NOT NULL,
|
|
body TEXT NULL,
|
|
commit_sha TEXT NULL,
|
|
submitted_at TIMESTAMPTZ NULL,
|
|
dismissed_at TIMESTAMPTZ NULL,
|
|
dismissed_by UUID NULL REFERENCES "user"(id) ON DELETE CASCADE,
|
|
dismiss_reason TEXT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL,
|
|
updated_at TIMESTAMPTZ NOT NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_pull_request_id ON pr_review (pull_request_id);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_author_id ON pr_review (author_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS pr_review_comment (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
review_id UUID NOT NULL REFERENCES pr_review(id) ON DELETE CASCADE,
|
|
pull_request_id UUID NOT NULL REFERENCES pull_request(id) ON DELETE CASCADE,
|
|
author_id UUID NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
|
|
body TEXT NOT NULL,
|
|
path TEXT NOT NULL,
|
|
line INTEGER NULL,
|
|
original_line INTEGER NULL,
|
|
start_line INTEGER NULL,
|
|
original_start_line INTEGER NULL,
|
|
diff_hunk TEXT NULL,
|
|
in_reply_to_id UUID NULL REFERENCES pr_review_comment(id) ON DELETE CASCADE,
|
|
edited_at TIMESTAMPTZ NULL,
|
|
created_at TIMESTAMPTZ NOT NULL,
|
|
updated_at TIMESTAMPTZ NOT NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_comment_review_id ON pr_review_comment (review_id);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_comment_pull_request_id ON pr_review_comment (pull_request_id);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_comment_author_id ON pr_review_comment (author_id);
|
|
CREATE INDEX IF NOT EXISTS idx_pr_review_comment_path ON pr_review_comment (path);
|
|
|
|
CREATE TABLE IF NOT EXISTS branch_protection_rule (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
repo_id UUID NOT NULL REFERENCES repo(id) ON DELETE CASCADE,
|
|
pattern TEXT NOT NULL,
|
|
require_approvals INTEGER NOT NULL DEFAULT 0,
|
|
require_status_checks BOOLEAN NOT NULL DEFAULT false,
|
|
required_status_checks TEXT[] NOT NULL DEFAULT '{}',
|
|
require_linear_history BOOLEAN NOT NULL DEFAULT false,
|
|
allow_force_pushes BOOLEAN NOT NULL DEFAULT false,
|
|
allow_deletions BOOLEAN NOT NULL DEFAULT false,
|
|
require_signed_commits BOOLEAN NOT NULL DEFAULT false,
|
|
require_code_owner_review BOOLEAN NOT NULL DEFAULT false,
|
|
dismiss_stale_reviews BOOLEAN NOT NULL DEFAULT false,
|
|
restrict_pushes BOOLEAN NOT NULL DEFAULT false,
|
|
push_allowances UUID[] NOT NULL DEFAULT '{}',
|
|
restrict_review_dismissal BOOLEAN NOT NULL DEFAULT false,
|
|
dismissal_allowances UUID[] NOT NULL DEFAULT '{}',
|
|
require_conversation_resolution BOOLEAN NOT NULL DEFAULT false,
|
|
created_by UUID NULL REFERENCES "user"(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL,
|
|
updated_at TIMESTAMPTZ NOT NULL,
|
|
CONSTRAINT uq_branch_protection_rule UNIQUE (repo_id, pattern)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_branch_protection_rule_repo_id ON branch_protection_rule (repo_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS repo_fork (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
parent_repo_id UUID NOT NULL REFERENCES repo(id) ON DELETE CASCADE,
|
|
fork_repo_id UUID NOT NULL REFERENCES repo(id) ON DELETE CASCADE,
|
|
forked_by UUID NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL,
|
|
CONSTRAINT uq_repo_fork UNIQUE (parent_repo_id, fork_repo_id)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_repo_fork_parent ON repo_fork (parent_repo_id);
|
|
CREATE INDEX IF NOT EXISTS idx_repo_fork_fork ON repo_fork (fork_repo_id);
|