Class: SpreeCmCommissioner::IdempotencyKey

Inherits:
Base
  • Object
show all
Defined in:
app/models/spree_cm_commissioner/idempotency_key.rb

Class Method Summary collapse

Class Method Details

.run_once(key) ⇒ Object

Runs the block exactly once per key. A re-run finds the row and no-ops. Key row + block side effects commit atomically. ‘requires_new: true` opens a savepoint so a rescued insert race rolls back only this block, not an outer txn.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'app/models/spree_cm_commissioner/idempotency_key.rb', line 6

def self.run_once(key)
  return yield if key.blank?

  transaction(requires_new: true) do
    create!(key: key)
    yield
  end
rescue ActiveRecord::RecordNotUnique
  CmAppLogger.log(
    label: 'SpreeCmCommissioner::IdempotencyKey.run_once',
    data: { event: 'duplicate_skipped', key: key }
  )
  nil # already applied by a concurrent run
end