Sha256: e48c3896b406f4ceeea50a29b2aafab480e892dc571db38aa59b7cf87daa40c4

Contents?: true

Size: 1.46 KB

Versions: 62

Compression:

Stored size: 1.46 KB

Contents

module Workarea
  module Insights
    class HotSearches < Base
      class << self
        def dashboards
          %w(search)
        end

        def generate_weekly!
          median = revenue_change_median
          standard_deviation = revenue_change_standard_deviation

          [2, 1, 0].each do |min_deviations|
            results = find_results(
              median: median,
              standard_deviation: standard_deviation,
              min_deviations: min_deviations
            )

            if results.present?
              create!(results: results.map(&:as_document))
              return
            end
          end
        end

        def find_results(median:, standard_deviation:, min_deviations:)
          min_revenue_change = median + (standard_deviation * min_deviations)
          min_revenue_change = min_revenue_change < 0 ? 0 : min_revenue_change

          Metrics::SearchByWeek
            .last_week
            .where(:revenue_change.gt => min_revenue_change)
            .order_by(revenue_change: :desc, prior_week_revenue: :desc, _id: :asc)
            .limit(Workarea.config.insights_searches_list_max_results)
            .to_a
        end

        def revenue_change_median
          Metrics::SearchByWeek.last_week.improved_revenue.revenue_change_median
        end

        def revenue_change_standard_deviation
          Metrics::SearchByWeek.last_week.improved_revenue.revenue_change_standard_deviation
        end
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.4.13 app/models/workarea/insights/hot_searches.rb
workarea-core-3.4.12 app/models/workarea/insights/hot_searches.rb