Class: SpreeChannable::OrderImportJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/spree_channable/order_import_job.rb

Instance Method Summary collapse

Instance Method Details

#get_ordersObject



13
14
15
16
17
18
19
20
21
22
23
# File 'app/jobs/spree_channable/order_import_job.rb', line 13

def get_orders
  limit = 100
  orders = []
  loop do
    order_data = client.get_orders(offset: orders.size, limit: limit, start_date: (SpreeChannable.configuration.polling_interval * 2).minutes.ago)
    order_data.data.orders.each {|order| orders << order} if order_data.data.orders.any?

    break if order_data.data.total < limit || (!order_data.success && order_data.response.code != 429)
  end
  orders
end

#perform(*args) ⇒ Object



5
6
7
8
9
10
11
# File 'app/jobs/spree_channable/order_import_job.rb', line 5

def perform(*args)
  return unless ::SpreeChannable.configuration.active?

  @client = ::Channable::Client.new
  channable_orders = get_orders
  channable_orders.each &method(:persist_order)
end

#persist_order(channable_order) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'app/jobs/spree_channable/order_import_job.rb', line 25

def persist_order(channable_order)
  return if Spree::Order.exists?(channable_order_id: channable_order.id)
  begin
    order_attributes = Spree::Order.channable_to_order_params(channable_order)
    SpreeChannable::OrderImporter.import(nil, order_attributes)
  rescue StandardError => e
    Rails.logger.warn "[CHANNABLE] Failed to import order #{channable_order.id}. #{e}"
    @client.cancellation_update(channable_order.id)
  end
end