module AdvisoryLock
module_function
def with_lock(key)
lock_id = Zlib.crc32(key.to_s)
got_lock = ApplicationRecord.connection.select_value("SELECT pg_try_advisory_lock(#{lock_id})")
class OutboxEvent < ApplicationRecord
enum status: { pending: 0, publishing: 1, published: 2, failed: 3 }
validates :event_name, :aggregate_type, :aggregate_id, presence: true
validates :dedupe_key, presence: true, uniqueness: true