summaryrefslogtreecommitdiff
path: root/app/models/concerns/ttl_expirable.rb
blob: 00abe0a06e62c29619e104a5cb330569d7c0adcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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