Files
fizzy/app/models/account/external_id_sequence.rb
T

27 lines
567 B
Ruby

# Provides sequential IDs for +external_account_id+ when creating accounts without one.
class Account::ExternalIdSequence < ApplicationRecord
class << self
def next
with_lock do |sequence|
sequence.increment!(:value).value
end
end
def value
first&.value
end
private
def with_lock
transaction do
sequence = lock.first_or_create!(value: initial_value)
yield sequence
end
end
def initial_value
Account.maximum(:external_account_id) || 0
end
end
end