2020-03-11 20:16:00 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Jobs
|
|
|
|
# Runs periodically to send out bookmark reminders, capped at 300 at a time.
|
|
|
|
# Any leftovers will be caught in the next run, because the reminder_at column
|
|
|
|
# is set to NULL once a reminder has been sent.
|
|
|
|
class BookmarkReminderNotifications < ::Jobs::Scheduled
|
|
|
|
every 5.minutes
|
|
|
|
|
|
|
|
def self.max_reminder_notifications_per_run
|
2020-11-16 18:08:12 -05:00
|
|
|
@@max_reminder_notifications_per_run ||= 300
|
2020-03-11 20:16:00 -04:00
|
|
|
@@max_reminder_notifications_per_run
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.max_reminder_notifications_per_run=(max)
|
|
|
|
@@max_reminder_notifications_per_run = max
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute(args = nil)
|
2022-03-18 10:31:35 -04:00
|
|
|
bookmarks = Bookmark.pending_reminders.includes(:user).order("reminder_at ASC")
|
2020-03-11 20:16:00 -04:00
|
|
|
bookmarks
|
|
|
|
.limit(BookmarkReminderNotifications.max_reminder_notifications_per_run)
|
2022-05-08 19:37:23 -04:00
|
|
|
.each { |bookmark| BookmarkReminderNotificationHandler.new(bookmark).send_notification }
|
2020-03-11 20:16:00 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|