diff options
Diffstat (limited to 'app/models/concerns/ttl_expirable.rb')
-rw-r--r-- | app/models/concerns/ttl_expirable.rb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/app/models/concerns/ttl_expirable.rb b/app/models/concerns/ttl_expirable.rb new file mode 100644 index 00000000000..00abe0a06e6 --- /dev/null +++ b/app/models/concerns/ttl_expirable.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module TtlExpirable + extend ActiveSupport::Concern + + included do + validates :status, presence: true + + enum status: { default: 0, expired: 1, processing: 2, error: 3 } + + scope :updated_before, ->(number_of_days) { where("updated_at <= ?", Time.zone.now - number_of_days.days) } + scope :active, -> { where(status: :default) } + + scope :lock_next_by, ->(sort) do + order(sort) + .limit(1) + .lock('FOR UPDATE SKIP LOCKED') + end + end +end |