53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class MigrateCharacterSeriesToMemberships < ActiveRecord::Migration[8.0]
|
|
# Mapping from legacy integer values to slugs
|
|
LEGACY_TO_SLUG = {
|
|
1 => 'standard',
|
|
2 => 'grand',
|
|
3 => 'zodiac',
|
|
4 => 'promo',
|
|
5 => 'collab',
|
|
6 => 'eternal',
|
|
7 => 'evoker',
|
|
8 => 'saint',
|
|
9 => 'fantasy',
|
|
10 => 'summer',
|
|
11 => 'yukata',
|
|
12 => 'valentine',
|
|
13 => 'halloween',
|
|
14 => 'formal',
|
|
15 => 'event'
|
|
}.freeze
|
|
|
|
def up
|
|
# Build lookup hash: slug -> UUID
|
|
slug_to_uuid = CharacterSeries.pluck(:slug, :id).to_h
|
|
|
|
migrated = 0
|
|
memberships_created = 0
|
|
|
|
Character.where.not(series: []).find_each do |character|
|
|
character.series.each do |series_int|
|
|
slug = LEGACY_TO_SLUG[series_int]
|
|
next unless slug
|
|
|
|
series_id = slug_to_uuid[slug]
|
|
next unless series_id
|
|
|
|
CharacterSeriesMembership.find_or_create_by!(
|
|
character_id: character.id,
|
|
character_series_id: series_id
|
|
)
|
|
memberships_created += 1
|
|
end
|
|
migrated += 1
|
|
end
|
|
|
|
puts "Migrated #{migrated} characters, created #{memberships_created} memberships"
|
|
end
|
|
|
|
def down
|
|
CharacterSeriesMembership.delete_all
|
|
end
|
|
end
|