diff --git a/backend/migrations/000036_gear_archetype_hero_items.sql b/backend/migrations/000036_gear_archetype_hero_items.sql new file mode 100644 index 0000000..993d5d7 --- /dev/null +++ b/backend/migrations/000036_gear_archetype_hero_items.sql @@ -0,0 +1,168 @@ +BEGIN; + +CREATE SEQUENCE IF NOT EXISTS public.hero_item_id_seq; + +ALTER TABLE public.hero_gear + ADD COLUMN IF NOT EXISTS item_id bigint, + ADD COLUMN IF NOT EXISTS form_id text, + ADD COLUMN IF NOT EXISTS name text, + ADD COLUMN IF NOT EXISTS subtype text, + ADD COLUMN IF NOT EXISTS rarity text, + ADD COLUMN IF NOT EXISTS ilvl integer, + ADD COLUMN IF NOT EXISTS base_primary integer, + ADD COLUMN IF NOT EXISTS primary_stat integer, + ADD COLUMN IF NOT EXISTS stat_type text, + ADD COLUMN IF NOT EXISTS speed_modifier double precision, + ADD COLUMN IF NOT EXISTS crit_chance double precision, + ADD COLUMN IF NOT EXISTS agility_bonus integer, + ADD COLUMN IF NOT EXISTS set_name text, + ADD COLUMN IF NOT EXISTS special_effect text; + +ALTER TABLE public.hero_inventory + ADD COLUMN IF NOT EXISTS item_id bigint, + ADD COLUMN IF NOT EXISTS form_id text, + ADD COLUMN IF NOT EXISTS name text, + ADD COLUMN IF NOT EXISTS subtype text, + ADD COLUMN IF NOT EXISTS rarity text, + ADD COLUMN IF NOT EXISTS ilvl integer, + ADD COLUMN IF NOT EXISTS base_primary integer, + ADD COLUMN IF NOT EXISTS primary_stat integer, + ADD COLUMN IF NOT EXISTS stat_type text, + ADD COLUMN IF NOT EXISTS speed_modifier double precision, + ADD COLUMN IF NOT EXISTS crit_chance double precision, + ADD COLUMN IF NOT EXISTS agility_bonus integer, + ADD COLUMN IF NOT EXISTS set_name text, + ADD COLUMN IF NOT EXISTS special_effect text; + +UPDATE public.hero_gear +SET item_id = nextval('public.hero_item_id_seq') +WHERE item_id IS NULL; + +UPDATE public.hero_inventory +SET item_id = nextval('public.hero_item_id_seq') +WHERE item_id IS NULL; + +ALTER TABLE public.hero_gear + ALTER COLUMN item_id SET DEFAULT nextval('public.hero_item_id_seq'); + +ALTER TABLE public.hero_inventory + ALTER COLUMN item_id SET DEFAULT nextval('public.hero_item_id_seq'); + +ALTER TABLE public.hero_inventory + DROP CONSTRAINT IF EXISTS hero_inventory_gear_id_key; + +ALTER TABLE public.hero_gear + ADD CONSTRAINT hero_gear_item_id_key UNIQUE (item_id); + +ALTER TABLE public.hero_inventory + ADD CONSTRAINT hero_inventory_item_id_key UNIQUE (item_id); + +WITH canonical AS ( + SELECT DISTINCT ON (slot, name, form_id, subtype) + id, slot, name, form_id, subtype + FROM gear + WHERE id <= 2317 + ORDER BY slot, name, form_id, subtype, id +) +UPDATE public.hero_gear hg +SET form_id = g.form_id, + name = g.name, + subtype = g.subtype, + rarity = g.rarity, + ilvl = g.ilvl, + base_primary = g.base_primary, + primary_stat = g.primary_stat, + stat_type = g.stat_type, + speed_modifier = g.speed_modifier, + crit_chance = g.crit_chance, + agility_bonus = g.agility_bonus, + set_name = g.set_name, + special_effect = g.special_effect, + gear_id = c.id +FROM gear g +JOIN canonical c ON c.slot = g.slot AND c.name = g.name AND c.form_id = g.form_id AND c.subtype = g.subtype +WHERE hg.gear_id = g.id; + +WITH fallback AS ( + SELECT DISTINCT ON (slot, name) + id, slot, name + FROM gear + WHERE id <= 2317 + ORDER BY slot, name, id +) +UPDATE public.hero_gear hg +SET form_id = g.form_id, + name = g.name, + subtype = g.subtype, + rarity = g.rarity, + ilvl = g.ilvl, + base_primary = g.base_primary, + primary_stat = g.primary_stat, + stat_type = g.stat_type, + speed_modifier = g.speed_modifier, + crit_chance = g.crit_chance, + agility_bonus = g.agility_bonus, + set_name = g.set_name, + special_effect = g.special_effect, + gear_id = f.id +FROM gear g +JOIN fallback f ON f.slot = g.slot AND f.name = g.name +WHERE hg.gear_id = g.id AND hg.gear_id > 2317; + +WITH canonical AS ( + SELECT DISTINCT ON (slot, name, form_id, subtype) + id, slot, name, form_id, subtype + FROM gear + WHERE id <= 2317 + ORDER BY slot, name, form_id, subtype, id +) +UPDATE public.hero_inventory hi +SET form_id = g.form_id, + name = g.name, + subtype = g.subtype, + rarity = g.rarity, + ilvl = g.ilvl, + base_primary = g.base_primary, + primary_stat = g.primary_stat, + stat_type = g.stat_type, + speed_modifier = g.speed_modifier, + crit_chance = g.crit_chance, + agility_bonus = g.agility_bonus, + set_name = g.set_name, + special_effect = g.special_effect, + gear_id = c.id +FROM gear g +JOIN canonical c ON c.slot = g.slot AND c.name = g.name AND c.form_id = g.form_id AND c.subtype = g.subtype +WHERE hi.gear_id = g.id; + +WITH fallback AS ( + SELECT DISTINCT ON (slot, name) + id, slot, name + FROM gear + WHERE id <= 2317 + ORDER BY slot, name, id +) +UPDATE public.hero_inventory hi +SET form_id = g.form_id, + name = g.name, + subtype = g.subtype, + rarity = g.rarity, + ilvl = g.ilvl, + base_primary = g.base_primary, + primary_stat = g.primary_stat, + stat_type = g.stat_type, + speed_modifier = g.speed_modifier, + crit_chance = g.crit_chance, + agility_bonus = g.agility_bonus, + set_name = g.set_name, + special_effect = g.special_effect, + gear_id = f.id +FROM gear g +JOIN fallback f ON f.slot = g.slot AND f.name = g.name +WHERE hi.gear_id = g.id AND hi.gear_id > 2317; + +DELETE FROM hero_gear WHERE gear_id > 2317; +DELETE FROM hero_inventory WHERE gear_id > 2317; +DELETE FROM gear WHERE id > 2317; + +COMMIT;