docbrown/app/models/credit.rb
2019-06-28 07:56:09 -04:00

50 lines
1.9 KiB
Ruby

class Credit < ApplicationRecord
attr_accessor :number_to_purchase
belongs_to :user, optional: true
belongs_to :organization, optional: true
counter_culture :user,
column_name: proc { |model| "#{model.spent ? 'spent' : 'unspent'}_credits_count" },
column_names: {
["credits.spent = ?", true] => "spent_credits_count",
["credits.spent = ?", false] => "unspent_credits_count",
["credits.id > ?", 0] => "credits_count"
}
counter_culture :organization,
column_name: proc { |model| "#{model.spent ? 'spent' : 'unspent'}_credits_count" },
column_names: {
["credits.spent = ?", true] => "spent_credits_count",
["credits.spent = ?", false] => "unspent_credits_count",
["credits.id > ?", 0] => "credits_count"
}
def self.add_to(user, amount)
credit_objects = Array.new(amount) { Credit.new(user_id: user.id) }
Credit.import credit_objects
Credit.update_cache_columns(user)
end
def self.remove_from(user, amount)
user.credits.where(spent: false).limit(amount).delete_all
Credit.update_cache_columns(user)
end
def self.add_to_org(org, amount)
credit_objects = Array.new(amount) { Credit.new(organization_id: org.id) }
Credit.import credit_objects
Credit.update_cache_columns(org)
end
def self.remove_from_org(org, amount)
org.credits.where(spent: false).limit(amount).delete_all
Credit.update_cache_columns(org)
end
def self.update_cache_columns(user_or_org)
user_or_org.credits_count = user_or_org.credits.size
user_or_org.spent_credits_count = user_or_org.credits.where(spent: true).size
user_or_org.unspent_credits_count = user_or_org.credits.where(spent: false).size
user_or_org.save
end
end