55 lines
2.5 KiB
SQL
55 lines
2.5 KiB
SQL
-- 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);
|