Files
site/app/workers/wow_pet_detail_worker.rb

48 lines
1.6 KiB
Ruby

# frozen_string_literal: true
class WowPetDetailWorker < WowSidekiqWorker
def perform(pet_id)
return unless (pet = WowPet.find_by(pet_id: pet_id))
RBattlenet.set_options(locale: 'all')
result = RBattlenet::Wow::Pet.find(pet_id)
return unless result.status_code == 200
pet.is_capturable = result.is_capturable
pet.is_battlepet = result.is_battlepet
pet.is_alliance_only = result.is_alliance_only
pet.is_horde_only = result.is_horde_only
pet.is_capturable = result.is_capturable
pet.is_random_creature_display = result.is_random_creature_display
pet.icon = result.icon
pet.creature_id = result.creature.id
pet.battle_pet_type = result.battle_pet_type.type
pet.battle_pet_type_id = result.battle_pet_type.id
# Localisation data
locales.each do |locale|
Mobility.with_locale(locale[0]) do
pet.translated_battle_pet_type = result.battle_pet_type.name[locale[1]]
pet.description = result.description[locale[1]]
end
end
unless pet.creature_display_id
creature = RBattlenet::Wow::Creature.find(pet.creature_id)
pet.creature_display_id = creature.creature_displays.first.id if creature.status_code == 200
end
creature_media = RBattlenet::Wow::CreatureMedia.find(pet.creature_display_id)
pet.media_zoom_url = creature_media.assets.first.value if creature_media.status_code == 200
result.abilities&.each do |ability|
next unless (local_ability = WowPetAbility.where(ability_id: ability.ability.id).first)
LearnedWowPetAbility.where(wow_pet: pet.id, wow_pet_ability: local_ability.id).first_or_create
end
pet.save
end
end