Class: Workarea::Recommendation::UserActivityBased

Inherits:
Object
  • Object
show all
Defined in:
app/queries/workarea/recommendation/user_activity_based.rb

Instance Method Summary collapse

Constructor Details

#initialize(metrics) ⇒ UserActivityBased

Returns a new instance of UserActivityBased.



4
5
6
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 4

def initialize(metrics)
  @metrics = metrics
end

Instance Method Details

#max_resultsObject



16
17
18
19
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 16

def max_results
  # accommodate some missing or undisplayable products
  Workarea.config.per_page
end


29
30
31
32
33
34
35
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 29

def popular_product_ids
  Insights::TopProducts
    .current
    .results
    .map { |r| r['product_id'] }
    .take(max_results)
end

#recent_category_idsObject



25
26
27
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 25

def recent_category_ids
  @metrics.viewed.recent_category_ids(unique: true)
end

#recent_product_idsObject



21
22
23
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 21

def recent_product_ids
  @metrics.viewed.recent_product_ids(unique: true)
end


37
38
39
40
41
42
43
44
45
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 37

def related_product_ids
  query = Workarea::Search::RelatedProducts.new(
    product_ids: recent_product_ids,
    category_ids: recent_category_ids,
    exclude_product_ids: recent_product_ids
  )

  query.results.map { |r| r[:catalog_id] }
end

#resultsObject



8
9
10
11
12
13
14
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 8

def results
  if recent_product_ids.blank? && recent_category_ids.blank?
    popular_product_ids.take(max_results)
  else
    related_product_ids.take(max_results)
  end
end