main
rb 21 lines 767 Bytes
Raw
1 # frozen_string_literal: true
2
3 # One row per user per billing period, counting siGit Code Cloud requests for
4 # allowance enforcement. Atomic increments so concurrent requests can't lose a
5 # count.
6 class CloudUsage < ApplicationRecord
7 belongs_to :user
8
9 # Count for a user in the given period (0 when unseen).
10 def self.used(user, period_key)
11 where(user_id: user.id, period_key: period_key).pick(:request_count) || 0
12 end
13
14 # Record one cloud request against the user's current period. Returns the new
15 # count.
16 def self.record_request!(user, period_key)
17 row = find_or_create_by!(user_id: user.id, period_key: period_key)
18 where(id: row.id).update_all("request_count = request_count + 1, updated_at = NOW()")
19 row.reload.request_count
20 end
21 end