Files
site/app/workers/wow_character_achievements_worker.rb

55 lines
2.2 KiB
Ruby

# frozen_string_literal: true
class WowCharacterAchievementsWorker < WowSidekiqWorker
def perform(wow_character_id)
return unless (wow_character = WowCharacter.find_by(character_id: wow_character_id))
RBattlenet.set_options(locale: 'en_US')
params = { realm: wow_character.wow_realm.slug, name: wow_character.name.downcase }
result = RBattlenet::Wow::Character::Achievements.find(params)
return unless result.status_code == 200
result.achievements&.each do |achievement|
next unless (wow_achievement = WowAchievement.find_by(achievement_id: achievement.id))
wow_achievement_completed = CompletedWowAchievement.where(
wow_achievement: wow_achievement,
wow_character: wow_character
).first_or_initialize
wow_achievement_completed.completed_timestamp = Time.at(achievement.completed_timestamp.to_s[0..-4].to_i).utc
wow_achievement_completed.save
if achievement.criteria
next unless (wow_achievement_criterium = WowAchievementCriterium.find_by(criterium_id: achievement.criteria.id))
wow_achievement_criterium_completed = CompletedWowAchievementCriterium.where(
wow_achievement_criterium: wow_achievement_criterium,
wow_character: wow_character
).first_or_initialize
wow_achievement_criterium_completed.is_completed = achievement.criteria.is_completed
wow_achievement_criterium_completed.amount = achievement.criteria.amount if achievement.criteria.amount
wow_achievement_criterium_completed.save
achievement.criteria.child_criteria&.each do |child_criteria|
next unless (wow_achievement_child_criterium = WowAchievementCriterium.find_by(criterium_id: child_criteria.id))
wow_achievement_child_criterium_completed = CompletedWowAchievementCriterium.where(
wow_achievement_criterium: wow_achievement_child_criterium,
wow_character: wow_character
).first_or_initialize
wow_achievement_child_criterium_completed.is_completed = child_criteria.is_completed
wow_achievement_child_criterium_completed.amount = child_criteria.amount if child_criteria.amount
wow_achievement_child_criterium_completed.save
end
end
end
end
end