openaustralia/planningalerts

View on GitHub
app/models/stat.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# typed: strict
# frozen_string_literal: true

class Stat < ApplicationRecord
  extend T::Sig

  sig { returns(Integer) }
  def self.applications_sent
    get_value_for_key("applications_sent")
  end

  sig { params(value: Integer).void }
  def self.increment_applications_sent(value)
    increment_value_for_key("applications_sent", value)
  end

  sig { returns(Integer) }
  def self.emails_sent
    get_value_for_key("emails_sent")
  end

  sig { params(value: Integer).void }
  def self.increment_emails_sent(value)
    increment_value_for_key("emails_sent", value)
  end

  sig { params(key: String).returns(Integer) }
  def self.get_value_for_key(key)
    record_for_key(key).value
  end

  sig { params(key: String, value: Integer).void }
  def self.increment_value_for_key(key, value)
    # rubocop:disable Rails/SkipsModelValidations
    Stat.update_counters(record_for_key(key).id, value:)
    # rubocop:enable Rails/SkipsModelValidations
  end

  sig { params(key: String).returns(Stat) }
  def self.record_for_key(key)
    Stat.find_or_create_by(key:) { |s| s.value = 0 }
  end
end