OPC # 0001: Extract OPC into standalone repo
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
-- OPC schema — run once against the controlplanedb database
|
||||
-- Convention: commits are linked by scanning git log for "OPC # XXXX" in the subject,
|
||||
-- no separate commit table needed.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS opc (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
number VARCHAR(20) NOT NULL UNIQUE, -- OPC # 0001
|
||||
title VARCHAR(500) NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
type VARCHAR(50) NOT NULL DEFAULT 'General',
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'New',
|
||||
priority VARCHAR(20) NOT NULL DEFAULT 'Medium',
|
||||
assignee VARCHAR(200) NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS opc_note (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
opc_id UUID NOT NULL REFERENCES opc(id) ON DELETE CASCADE,
|
||||
author VARCHAR(200) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Artifact types: BusinessRequirement, Rule, Spec, Documentation, QaTestPath
|
||||
CREATE TABLE IF NOT EXISTS opc_artifact (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
opc_id UUID NOT NULL REFERENCES opc(id) ON DELETE CASCADE,
|
||||
artifact_type VARCHAR(50) NOT NULL,
|
||||
title VARCHAR(500) NOT NULL DEFAULT '',
|
||||
content TEXT NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Index to quickly look up by OPC number (used for git log grep linkage)
|
||||
CREATE INDEX IF NOT EXISTS ix_opc_number ON opc(number);
|
||||
CREATE INDEX IF NOT EXISTS ix_opc_note_opc_id ON opc_note(opc_id);
|
||||
CREATE INDEX IF NOT EXISTS ix_opc_artifact_opc_id ON opc_artifact(opc_id);
|
||||
|
||||
-- Manually pinned commits (in addition to auto-detected via git log grep)
|
||||
CREATE TABLE IF NOT EXISTS opc_pinned_commit (
|
||||
opc_id UUID NOT NULL REFERENCES opc(id) ON DELETE CASCADE,
|
||||
hash VARCHAR(40) NOT NULL,
|
||||
short_hash VARCHAR(10) NOT NULL DEFAULT '',
|
||||
subject VARCHAR(1000) NOT NULL DEFAULT '',
|
||||
author VARCHAR(200) NOT NULL DEFAULT '',
|
||||
pinned_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
pinned_by VARCHAR(200) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (opc_id, hash)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_opc_pinned_commit_opc_id ON opc_pinned_commit(opc_id);
|
||||
CREATE INDEX IF NOT EXISTS ix_opc_artifact_type ON opc_artifact(opc_id, artifact_type);
|
||||
Reference in New Issue
Block a user