* H-289: add Captain Skill management API * H-289: guard Captain Skill updates with CAS * H-289: version all Captain Skill updates --------- Co-authored-by: Rogee <rogee@ipao.vip>
39 lines
1.6 KiB
SQL
39 lines
1.6 KiB
SQL
CREATE TABLE captain_skills (
|
|
id SERIAL PRIMARY KEY,
|
|
account_id INTEGER NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
|
|
name VARCHAR(255) NOT NULL,
|
|
description VARCHAR(1024) NOT NULL,
|
|
instructions_md TEXT NOT NULL,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'active', 'archived')),
|
|
version INTEGER NOT NULL DEFAULT 1 CHECK (version > 0),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (account_id, name)
|
|
);
|
|
|
|
CREATE INDEX idx_captain_skills_account_status ON captain_skills(account_id, status);
|
|
|
|
CREATE TABLE captain_skill_references (
|
|
id SERIAL PRIMARY KEY,
|
|
skill_id INTEGER NOT NULL REFERENCES captain_skills(id) ON DELETE CASCADE,
|
|
reference_key VARCHAR(255) NOT NULL,
|
|
content_md TEXT NOT NULL,
|
|
position INTEGER NOT NULL CHECK (position >= 0),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (skill_id, reference_key),
|
|
UNIQUE (skill_id, position)
|
|
);
|
|
|
|
CREATE TABLE captain_assistant_skills (
|
|
id SERIAL PRIMARY KEY,
|
|
account_id INTEGER NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
|
|
assistant_id INTEGER NOT NULL REFERENCES captain_assistants(id) ON DELETE CASCADE,
|
|
skill_id INTEGER NOT NULL REFERENCES captain_skills(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (assistant_id, skill_id)
|
|
);
|
|
|
|
CREATE INDEX idx_captain_assistant_skills_account ON captain_assistant_skills(account_id);
|
|
CREATE INDEX idx_captain_assistant_skills_skill ON captain_assistant_skills(skill_id);
|