add achievement management
This commit is contained in:
54
app/workers/wow_character_achievements_worker.rb
Normal file
54
app/workers/wow_character_achievements_worker.rb
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user