Class: SpreeCmCommissioner::VotingLeaderboards::TimeRangeResult

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/voting_leaderboards/time_range_result.rb

Constant Summary collapse

EMPTY_RESULT =
{
  counts: {}.freeze,
  unique_voters: 0,
  unique_voters_per_contestant: {}.freeze
}.freeze

Instance Method Summary collapse

Instance Method Details

#call(voting_session_id:, from: nil, to: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/services/spree_cm_commissioner/voting_leaderboards/time_range_result.rb', line 31

def call(voting_session_id:, from: nil, to: nil)
  return failure(nil, I18n.t('spree_cm_commissioner.voting_leaderboards.time_range_result.invalid_range')) if invalid_range?(from, to)

  ids = contestant_ids(voting_session_id)
  return success(EMPTY_RESULT) if ids.empty?

  scope = votes_scope(voting_session_id, from, to)

  success(
    counts: fill(ids, scope.group(:contestant_id).sum(:quantity)),
    unique_voters: unique_voters(scope),
    unique_voters_per_contestant: fill(ids, unique_voters_per_contestant(scope))
  )
rescue StandardError => e
  failure(nil, e.message)
end