85 lines
2 KiB
Ruby
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
|