add management of items !
This commit is contained in:
@@ -6,7 +6,11 @@ class WowCharacterPositionsWorker < WowSidekiqWorker
|
||||
|
||||
# Protected data
|
||||
RBattlenet.set_options(locale: 'all')
|
||||
params = { character_id: wow_character_id, realm_id: wow_character.wow_realm.realm_id, token: wow_character.user.token }
|
||||
params = {
|
||||
character_id: wow_character_id,
|
||||
realm_id: wow_character.wow_realm.realm_id,
|
||||
token: wow_character.user.token
|
||||
}
|
||||
result = RBattlenet::Wow::Profile::ProtectedSummary.find(params)
|
||||
|
||||
return unless result.status_code == 200
|
||||
|
||||
18
app/workers/wow_item_class_detail_worker.rb
Normal file
18
app/workers/wow_item_class_detail_worker.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class WowItemClassDetailWorker < WowSidekiqWorker
|
||||
def perform(item_class_id)
|
||||
return unless (wow_item_class = WowItemClass.find_by(item_class_id: item_class_id))
|
||||
|
||||
RBattlenet.set_options(locale: 'all')
|
||||
result = RBattlenet::Wow::ItemClass.find(item_class_id)
|
||||
|
||||
return unless result.status_code == 200
|
||||
|
||||
result.item_subclasses.each do |item_subclass|
|
||||
wow_item_sub_class = wow_item_class.wow_item_sub_classes.create_with(wow_item_class: wow_item_class).find_or_create_by(item_sub_class_id: item_subclass.id)
|
||||
|
||||
WowItemSubClassDetailWorker.perform_async(wow_item_class.item_class_id, wow_item_sub_class.item_sub_class_id) if wow_item_sub_class.persisted?
|
||||
end
|
||||
end
|
||||
end
|
||||
24
app/workers/wow_item_classes_worker.rb
Normal file
24
app/workers/wow_item_classes_worker.rb
Normal file
@@ -0,0 +1,24 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class WowItemClassesWorker < WowSidekiqWorker
|
||||
def perform
|
||||
RBattlenet.authenticate(client_id: ENV['BLIZZARD_API_CLIENT_ID'], client_secret: ENV['BLIZZARD_API_CLIENT_SECRET'])
|
||||
RBattlenet.set_options(locale: 'all')
|
||||
result = RBattlenet::Wow::ItemClass.all
|
||||
|
||||
return unless result.status_code == 200
|
||||
|
||||
result.item_classes.each do |item_class|
|
||||
wow_item_class = WowItemClass.find_or_initialize_by(item_class_id: item_class.id)
|
||||
|
||||
# Localisation data
|
||||
locales.each do |locale|
|
||||
Mobility.with_locale(locale[0]) { wow_item_class.name = item_class.name[locale[1]] }
|
||||
end
|
||||
|
||||
wow_item_class.save
|
||||
|
||||
WowItemClassDetailWorker.perform_async(wow_item_class.item_class_id) if wow_item_class.persisted?
|
||||
end
|
||||
end
|
||||
end
|
||||
26
app/workers/wow_item_sub_class_detail_worker.rb
Normal file
26
app/workers/wow_item_sub_class_detail_worker.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class WowItemSubClassDetailWorker < WowSidekiqWorker
|
||||
def perform(item_class_id, item_sub_class_id)
|
||||
return unless (wow_item_sub_class = WowItemSubClass.joins(:wow_item_class).where(item_sub_class_id: item_sub_class_id, wow_item_class: { item_class_id: item_class_id }).first)
|
||||
|
||||
RBattlenet.set_options(locale: 'all')
|
||||
params = {
|
||||
class_id: item_class_id,
|
||||
id: item_sub_class_id
|
||||
}
|
||||
result = RBattlenet::Wow::ItemSubclass.find(params)
|
||||
|
||||
return unless result.status_code == 200
|
||||
|
||||
# Localisation data
|
||||
locales.each do |locale|
|
||||
Mobility.with_locale(locale[0]) do
|
||||
wow_item_sub_class.display_name = result.display_name[locale[1]] if result.display_name
|
||||
wow_item_sub_class.verbose_name = result.verbose_name[locale[1]] if result.verbose_name
|
||||
end
|
||||
end
|
||||
|
||||
wow_item_sub_class.save
|
||||
end
|
||||
end
|
||||
81
app/workers/wow_items_worker.rb
Normal file
81
app/workers/wow_items_worker.rb
Normal file
@@ -0,0 +1,81 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class WowItemsWorker < WowSidekiqWorker
|
||||
def perform(item_id, batch_size)
|
||||
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: "[#{item_id},]" }
|
||||
}
|
||||
result = RBattlenet::Wow::Search::Item.find(params)
|
||||
|
||||
return unless result.status_code == 200
|
||||
|
||||
result.results&.each do |item|
|
||||
wow_item = WowItem.find_or_initialize_by(item_id: item.data.id)
|
||||
|
||||
wow_item.level = item.data.level if item.data.level
|
||||
wow_item.required_level = item.data.required_level if item.data.required_level
|
||||
wow_item.sell_price = item.data.sell_price if item.data.sell_price
|
||||
wow_item.purchase_price = item.data.purchase_price if item.data.purchase_price
|
||||
wow_item.is_equippable = item.data.is_equippable if item.data.is_equippable
|
||||
wow_item.is_stackable = item.data.is_stackable if item.data.is_stackable
|
||||
wow_item.media_id = item.data.media.id if item.data.media.id
|
||||
wow_item.max_count = item.data.max_count if item.data.max_count
|
||||
|
||||
wow_item.wow_item_class = WowItemClass.find_by(item_class_id: item.data.item_class.id)
|
||||
wow_item.wow_item_sub_class = WowItemSubClass.joins(:wow_item_class).where(item_sub_class_id: item.data.item_subclass.id, wow_item_class: { item_class_id: item.data.item_class.id }).first
|
||||
|
||||
wow_item.wow_item_quality = find_or_create_wow_item_quality(item.data.quality)
|
||||
wow_item.wow_item_inventory_type = find_or_create_wow_item_inventory_type(item.data.inventory_type)
|
||||
|
||||
# Localisation data
|
||||
locales.each do |locale|
|
||||
Mobility.with_locale(locale[0]) do
|
||||
wow_item.name = item.data.name[locale[1]]
|
||||
end
|
||||
end
|
||||
|
||||
wow_item.save
|
||||
end
|
||||
|
||||
# Create a new job for the next batch
|
||||
WowItemsWorker.perform_async(result.results.last.data.id + 1, batch_size) unless result.results.count.zero?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_or_create_wow_item_quality(item_quality)
|
||||
wow_item_quality = WowItemQuality.find_or_initialize_by(item_quality_type: item_quality.type)
|
||||
|
||||
# Localisation data
|
||||
locales.each do |locale|
|
||||
Mobility.with_locale(locale[0]) do
|
||||
wow_item_quality.name = item_quality.name[locale[1]]
|
||||
end
|
||||
end
|
||||
|
||||
wow_item_quality.save
|
||||
|
||||
wow_item_quality.persisted? ? wow_item_quality : nil
|
||||
end
|
||||
|
||||
def find_or_create_wow_item_inventory_type(item_inventory_type)
|
||||
wow_item_inventory_type = WowItemInventoryType.find_or_initialize_by(item_inventory_type: item_inventory_type.type)
|
||||
|
||||
# Localisation data
|
||||
locales.each do |locale|
|
||||
Mobility.with_locale(locale[0]) do
|
||||
wow_item_inventory_type.name = item_inventory_type.name[locale[1]]
|
||||
end
|
||||
end
|
||||
|
||||
wow_item_inventory_type.save
|
||||
|
||||
wow_item_inventory_type.persisted? ? wow_item_inventory_type : nil
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user