Files
redux-scraper/app/models/domain/user_job_event/add_tracked_object.rb
2025-07-08 00:11:24 +00:00

37 lines
1.1 KiB
Ruby

# typed: strict
class Domain::UserJobEvent::AddTrackedObject < Domain::UserJobEvent
self.table_name = "domain_user_job_event_add_tracked_objects"
belongs_to :log_entry, class_name: "HttpLogEntry"
validates :log_entry_id, uniqueness: { scope: :kind }
attr_json :requested_at, ActiveModelUtcTimeValue.new
enum :kind, %i[favs followed_by following gallery]
validates :kind, presence: true, inclusion: { in: self.kinds.keys }
validates :num_added, presence: true, numericality: { only_integer: true }
validates :num_total, presence: true, numericality: { only_integer: true }
validates :requested_at, presence: true
validate :num_added_must_be_less_than_or_equal_to_num_total
before_validation :set_requested_at
private
sig { void }
def num_added_must_be_less_than_or_equal_to_num_total
if (na = self.num_added) && (nt = self.num_total) && na > nt
if na > nt
self.errors.add(:num_added, "must be less than or equal to num_total")
end
end
end
sig { void }
def set_requested_at
if le = self.log_entry
self.requested_at = le.requested_at&.utc
end
end
end