hensei-api/db/data/20251214104719_migrate_character_series_to_memberships.rb

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