Add brand set and gear administration

This commit is contained in:
JB
2026-07-24 22:52:49 -04:00
parent b430a291fa
commit e605e4c0ee
10 changed files with 334 additions and 9 deletions
+49 -1
View File
@@ -42,7 +42,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS stat_attributes_name_nocase_idx ON stat_attrib
CREATE TABLE IF NOT EXISTS talents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
category TEXT NOT NULL CHECK(category IN ('Weapon', 'Backpack', 'Vest')),
category TEXT NOT NULL CHECK(category IN ('Weapon', 'Backpack', 'Body Armor', 'Vest')),
active INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
@@ -91,3 +91,51 @@ CREATE TABLE IF NOT EXISTS talent_tier_effects (
created_at TEXT NOT NULL,
UNIQUE(talent_tier_id, stat_attribute_id)
);
CREATE TABLE IF NOT EXISTS brand_sets (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
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 brand_sets_name_nocase_idx ON brand_sets(name COLLATE NOCASE);
CREATE TABLE IF NOT EXISTS brand_set_effects (
id TEXT PRIMARY KEY,
brand_set_id TEXT NOT NULL REFERENCES brand_sets(id) ON DELETE CASCADE,
pieces_required INTEGER NOT NULL CHECK(pieces_required IN (2, 3, 4)),
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
value REAL NOT NULL CHECK(value >= 0),
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(brand_set_id, pieces_required)
);
CREATE TABLE IF NOT EXISTS gear (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
slot TEXT NOT NULL CHECK(slot IN ('Holster', 'Gloves', 'Backpack', 'Knee Pads', 'Body Armor', 'Mask')),
tier INTEGER NOT NULL CHECK(tier BETWEEN 0 AND 2),
level INTEGER NOT NULL CHECK(level BETWEEN 1 AND 50),
base_health_min REAL NOT NULL CHECK(base_health_min >= 0),
base_health_max REAL NOT NULL CHECK(base_health_max >= base_health_min),
base_armor_min REAL,
base_armor_max REAL,
active INTEGER NOT NULL DEFAULT 1 CHECK(active IN (0, 1)),
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
CHECK(
(slot IN ('Gloves', 'Knee Pads', 'Body Armor') AND base_armor_min IS NOT NULL AND base_armor_max IS NOT NULL AND base_armor_min >= 0 AND base_armor_max >= base_armor_min)
OR
(slot NOT IN ('Gloves', 'Knee Pads', 'Body Armor') AND base_armor_min IS NULL AND base_armor_max IS NULL)
)
);
CREATE UNIQUE INDEX IF NOT EXISTS gear_name_nocase_idx ON gear(name COLLATE NOCASE);
CREATE TABLE IF NOT EXISTS gear_brand_sets (
gear_id TEXT NOT NULL REFERENCES gear(id) ON DELETE CASCADE,
brand_set_id TEXT NOT NULL REFERENCES brand_sets(id),
PRIMARY KEY(gear_id, brand_set_id)
);
CREATE TABLE IF NOT EXISTS gear_talents (
gear_id TEXT NOT NULL REFERENCES gear(id) ON DELETE CASCADE,
talent_id TEXT NOT NULL REFERENCES talents(id),
PRIMARY KEY(gear_id, talent_id)
);