add fk columns for ax modifiers and befoulments, replace has_ax_skills with augment_type

This commit is contained in:
Justin Edmund 2025-12-30 22:43:31 -08:00
parent f30deea5d7
commit 9074f7301f
4 changed files with 135 additions and 0 deletions

View file

@ -0,0 +1,64 @@
# frozen_string_literal: true
class MigrateAxModifiersToFk < ActiveRecord::Migration[8.0]
def up
# Build lookup cache: game_skill_id -> weapon_stat_modifier.id
modifier_lookup = WeaponStatModifier.pluck(:game_skill_id, :id).to_h
# Migrate CollectionWeapon ax_modifier1
CollectionWeapon.where.not(ax_modifier1: nil).find_each do |cw|
modifier_id = modifier_lookup[cw.ax_modifier1]
if modifier_id
cw.update_columns(ax_modifier1_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier1=#{cw.ax_modifier1} on CollectionWeapon##{cw.id}"
end
end
# Migrate CollectionWeapon ax_modifier2
CollectionWeapon.where.not(ax_modifier2: nil).find_each do |cw|
modifier_id = modifier_lookup[cw.ax_modifier2]
if modifier_id
cw.update_columns(ax_modifier2_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier2=#{cw.ax_modifier2} on CollectionWeapon##{cw.id}"
end
end
# Migrate GridWeapon ax_modifier1
GridWeapon.where.not(ax_modifier1: nil).find_each do |gw|
modifier_id = modifier_lookup[gw.ax_modifier1]
if modifier_id
gw.update_columns(ax_modifier1_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier1=#{gw.ax_modifier1} on GridWeapon##{gw.id}"
end
end
# Migrate GridWeapon ax_modifier2
GridWeapon.where.not(ax_modifier2: nil).find_each do |gw|
modifier_id = modifier_lookup[gw.ax_modifier2]
if modifier_id
gw.update_columns(ax_modifier2_ref_id: modifier_id)
else
Rails.logger.warn "[MigrateAxModifiers] Unknown ax_modifier2=#{gw.ax_modifier2} on GridWeapon##{gw.id}"
end
end
end
def down
# Reverse: copy FK back to integer columns
WeaponStatModifier.find_each do |modifier|
next unless modifier.game_skill_id
CollectionWeapon.where(ax_modifier1_ref_id: modifier.id)
.update_all(ax_modifier1: modifier.game_skill_id)
CollectionWeapon.where(ax_modifier2_ref_id: modifier.id)
.update_all(ax_modifier2: modifier.game_skill_id)
GridWeapon.where(ax_modifier1_ref_id: modifier.id)
.update_all(ax_modifier1: modifier.game_skill_id)
GridWeapon.where(ax_modifier2_ref_id: modifier.id)
.update_all(ax_modifier2: modifier.game_skill_id)
end
end
end

View file

@ -0,0 +1,25 @@
# frozen_string_literal: true
class AddWeaponStatModifierFks < ActiveRecord::Migration[8.0]
def change
# collection_weapons - add FK columns
add_reference :collection_weapons, :ax_modifier1_ref,
foreign_key: { to_table: :weapon_stat_modifiers }
add_reference :collection_weapons, :ax_modifier2_ref,
foreign_key: { to_table: :weapon_stat_modifiers }
add_reference :collection_weapons, :befoulment_modifier,
foreign_key: { to_table: :weapon_stat_modifiers }
add_column :collection_weapons, :befoulment_strength, :float
add_column :collection_weapons, :exorcism_level, :integer, default: 0
# grid_weapons - same pattern
add_reference :grid_weapons, :ax_modifier1_ref,
foreign_key: { to_table: :weapon_stat_modifiers }
add_reference :grid_weapons, :ax_modifier2_ref,
foreign_key: { to_table: :weapon_stat_modifiers }
add_reference :grid_weapons, :befoulment_modifier,
foreign_key: { to_table: :weapon_stat_modifiers }
add_column :grid_weapons, :befoulment_strength, :float
add_column :grid_weapons, :exorcism_level, :integer, default: 0
end
end

View file

@ -0,0 +1,17 @@
# frozen_string_literal: true
class FinalizeAxModifierColumns < ActiveRecord::Migration[8.0]
def change
# Remove old integer columns
remove_column :collection_weapons, :ax_modifier1, :integer
remove_column :collection_weapons, :ax_modifier2, :integer
remove_column :grid_weapons, :ax_modifier1, :integer
remove_column :grid_weapons, :ax_modifier2, :integer
# Rename new FK columns to the original names
rename_column :collection_weapons, :ax_modifier1_ref_id, :ax_modifier1_id
rename_column :collection_weapons, :ax_modifier2_ref_id, :ax_modifier2_id
rename_column :grid_weapons, :ax_modifier1_ref_id, :ax_modifier1_id
rename_column :grid_weapons, :ax_modifier2_ref_id, :ax_modifier2_id
end
end

View file

@ -0,0 +1,29 @@
# frozen_string_literal: true
class AddAugmentTypeToWeaponSeries < ActiveRecord::Migration[8.0]
def up
add_column :weapon_series, :augment_type, :integer, default: 0, null: false
# Migrate existing has_ax_skills: true to augment_type: 1 (ax)
execute <<-SQL.squish
UPDATE weapon_series
SET augment_type = 1
WHERE has_ax_skills = true
SQL
remove_column :weapon_series, :has_ax_skills
end
def down
add_column :weapon_series, :has_ax_skills, :boolean, default: false, null: false
# Migrate augment_type: 1 (ax) back to has_ax_skills: true
execute <<-SQL.squish
UPDATE weapon_series
SET has_ax_skills = true
WHERE augment_type = 1
SQL
remove_column :weapon_series, :augment_type
end
end