Class: Spree::Products::RefreshMetricsJob

Inherits:
BaseJob
  • Object
show all
Defined in:
app/jobs/spree/products/refresh_metrics_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(product_id) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'app/jobs/spree/products/refresh_metrics_job.rb', line 6

def perform(product_id)
  product = Spree::Product.find_by(id: product_id)
  return unless product

  completed_order_ids = product.completed_orders.select(:id)
  variant_ids = product.variants_including_master.ids

  line_items = Spree::LineItem.joins(:order)
    .where(spree_orders: { id: completed_order_ids })
    .where(variant_id: variant_ids)

  # update columns to skip callbacks
  product.update_columns(
    units_sold_count: line_items.sum(:quantity),
    revenue: line_items.sum(:pre_tax_amount)
  )
end