feat(isac): add OS protocol management

This commit is contained in:
JB
2026-07-25 05:20:25 -04:00
parent fa21913112
commit 9f712e7790
27 changed files with 555 additions and 11 deletions
+56
View File
@@ -348,3 +348,59 @@ CREATE TABLE IF NOT EXISTS weapon_base_attribute_bonuses (
UNIQUE(weapon_id, stat_attribute_id),
UNIQUE(weapon_id, sort_order)
);
CREATE TABLE IF NOT EXISTS os_protocols (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
quality TEXT NOT NULL CHECK(quality IN ('Standard', 'Specialized', 'Superior', 'High-end')),
primary_attribute_type TEXT NOT NULL CHECK(primary_attribute_type IN ('Firepower', 'Toughness', 'Engineering')),
active INTEGER NOT NULL DEFAULT 1 CHECK(active IN (0, 1)),
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE UNIQUE INDEX IF NOT EXISTS os_protocols_name_nocase_idx ON os_protocols(name COLLATE NOCASE);
CREATE TABLE IF NOT EXISTS os_protocol_primary_effects (
id TEXT PRIMARY KEY,
protocol_id TEXT NOT NULL UNIQUE REFERENCES os_protocols(id) ON DELETE CASCADE,
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
base_value REAL NOT NULL CHECK(base_value >= 0)
);
CREATE TABLE IF NOT EXISTS os_protocol_secondary_profiles (
id TEXT PRIMARY KEY,
quality TEXT NOT NULL CHECK(quality IN ('Standard', 'Specialized', 'Superior', 'High-end')),
primary_attribute_type TEXT NOT NULL CHECK(primary_attribute_type IN ('Firepower', 'Toughness', 'Engineering')),
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(quality, primary_attribute_type)
);
CREATE TABLE IF NOT EXISTS os_protocol_secondary_effects (
id TEXT PRIMARY KEY,
profile_id TEXT NOT NULL REFERENCES os_protocol_secondary_profiles(id) ON DELETE CASCADE,
effect_role TEXT NOT NULL CHECK(effect_role IN ('Core', 'Damage', 'Health')),
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
value REAL NOT NULL CHECK(value >= 0),
UNIQUE(profile_id, effect_role),
UNIQUE(profile_id, stat_attribute_id)
);
CREATE TABLE IF NOT EXISTS os_protocol_talents (
id TEXT PRIMARY KEY,
protocol_id TEXT NOT NULL UNIQUE REFERENCES os_protocols(id) ON DELETE CASCADE,
name TEXT NOT NULL,
description_template TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE UNIQUE INDEX IF NOT EXISTS os_protocol_talents_name_nocase_idx ON os_protocol_talents(name COLLATE NOCASE);
CREATE TABLE IF NOT EXISTS os_protocol_talent_triggers (
talent_id TEXT NOT NULL REFERENCES os_protocol_talents(id) ON DELETE CASCADE,
trigger_id TEXT NOT NULL REFERENCES talent_triggers(id),
PRIMARY KEY(talent_id, trigger_id)
);
CREATE TABLE IF NOT EXISTS os_protocol_talent_effects (
id TEXT PRIMARY KEY,
talent_id TEXT NOT NULL REFERENCES os_protocol_talents(id) ON DELETE CASCADE,
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
base_value REAL NOT NULL,
sort_order INTEGER NOT NULL CHECK(sort_order BETWEEN 1 AND 12),
UNIQUE(talent_id, stat_attribute_id),
UNIQUE(talent_id, sort_order)
);