55 lines
2.2 KiB
Ruby
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
|