hensei-api/db/data/20251203183633_migrate_weapons_to_weapon_series.rb

85 lines
2 KiB
Ruby

# frozen_string_literal: true
class MigrateWeaponsToWeaponSeries < ActiveRecord::Migration[8.0]
# Mapping from legacy series integer (Weapon.series column) to WeaponSeries slug
LEGACY_TO_SLUG = {
0 => 'seraphic',
1 => 'grand',
2 => 'dark-opus',
4 => 'revenant',
6 => 'primal',
5 => 'beast',
7 => 'beast',
9 => 'omega',
8 => 'regalia',
10 => 'primal',
12 => 'hollowsky',
13 => 'xeno',
15 => 'rose',
17 => 'ultima',
16 => 'bahamut',
18 => 'epic',
20 => 'cosmos',
22 => 'superlative',
23 => 'vintage',
24 => 'class-champion',
28 => 'sephira',
14 => 'astral',
3 => 'draconic',
21 => 'ancestral',
29 => 'new-world-foundation',
19 => 'ennead',
11 => 'militis',
26 => 'malice',
27 => 'menace',
31 => 'illustrious',
25 => 'proven',
30 => 'revans',
32 => 'world',
33 => 'exo',
34 => 'draconic-providence',
37 => 'celestial',
41 => 'celestial',
38 => 'omega-rebirth',
43 => 'collab',
35 => 'event',
-1 => 'gacha',
36 => 'gacha'
}.freeze
def up
# Build lookup from slug to UUID
slug_to_uuid = WeaponSeries.pluck(:slug, :id).to_h
puts 'Migrating weapons to use weapon_series_id...'
migrated = 0
skipped = 0
Weapon.find_each do |weapon|
next if weapon.series.blank?
slug = LEGACY_TO_SLUG[weapon.series.to_i]
unless slug
puts " Warning: No slug mapping for legacy series #{weapon.series} (weapon: #{weapon.name_en})"
skipped += 1
next
end
weapon_series_id = slug_to_uuid[slug]
unless weapon_series_id
puts " Warning: No weapon_series found for slug '#{slug}' (weapon: #{weapon.name_en})"
skipped += 1
next
end
weapon.update_column(:weapon_series_id, weapon_series_id)
migrated += 1
end
puts " Migrated #{migrated} weapons, skipped #{skipped}"
end
def down
Weapon.update_all(weapon_series_id: nil)
end
end