Class: SpreeCmCommissioner::VoteCounters::AuditCounters

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

Constant Summary

Constants inherited from Base

Base::REDIS_KEY_TTL

Instance Attribute Summary

Attributes inherited from Base

#voting_session_id

Instance Method Summary collapse

Instance Method Details

#call(voting_session_id:) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/services/spree_cm_commissioner/vote_counters/audit_counters.rb', line 13

def call(voting_session_id:)
  @voting_session_id = voting_session_id

  db_counts = SpreeCmCommissioner::Vote.for_session(voting_session_id)
                                       .group(:contestant_id)
                                       .sum(:quantity)
  per_contestant_result = SpreeCmCommissioner::VoteCounters::PerContestantCounter
                          .call(voting_session_id: voting_session_id)
  return failure(nil, per_contestant_result.error.value) if per_contestant_result.failure?

  redis_counts = per_contestant_result.value[:counts]

  redis_counts.each do |contestant_id, redis_count|
    db_count = db_counts[contestant_id] || 0
    next if redis_count == db_count

    CmAppLogger.log(
      label: 'VoteCounter mismatch',
      data: {
        voting_session_id: voting_session_id,
        contestant_id: contestant_id,
        redis_count: redis_count,
        db_count: db_count
      }
    )
  end
  success(nil)
end