# frozen_string_literal: true class WowCreaturesWorker < WowSidekiqWorker def perform(creature_id, batch_size, keep_going_on) RBattlenet.authenticate(client_id: ENV['BLIZZARD_API_CLIENT_ID'], client_secret: ENV['BLIZZARD_API_CLIENT_SECRET']) RBattlenet.set_options(locale: 'all') params = { _page: 1, _pageSize: batch_size, orderby: 'id', filters: { id: "[#{creature_id},]" } } result = RBattlenet::Wow::Search::Creature.find(params) return unless result.status_code == 200 result.results&.each do |creature| wow_creature = WowCreature.find_or_initialize_by(creature_id: creature.data.id) wow_creature.display_id = creature.data.creature_displays&.first&.id wow_creature.is_tameable = creature.data&.is_tameable wow_creature.wow_creature_family = WowCreatureFamily.find_by(creature_family_id: creature.data.family.id) if creature.data.family wow_creature.wow_creature_type = WowCreatureType.find_by(creature_type_id: creature.data.type.id) if creature.data.type # Localisation data locales.each do |locale| Mobility.with_locale(locale[0]) do wow_creature.name = creature.data.name[locale[1]] end end wow_creature.save end # Create a new job for the next batch if keep_going_on is true return unless keep_going_on && !result.results.count.zero? WowCreaturesWorker.perform_async(result.results.last.data.id + 1, batch_size, keep_going_on) end end