Le campagne rispettano orario e giorni lavorativi, richiedono una mail di test con dati inseriti a mano prima dell'invio massivo e offrono una dashboard per monitorare l'avanzamento. Co-authored-by: Cursor <cursoragent@cursor.com>
29 lines
745 B
Ruby
29 lines
745 B
Ruby
class ResumeMailingsJob < ApplicationJob
|
|
queue_as :mailers
|
|
|
|
STALE_QUEUED_AFTER = 10.minutes
|
|
|
|
def perform
|
|
recover_stale_queued!
|
|
Mailing.sending.due_to_send.find_each do |mailing|
|
|
next unless Mailings::SendClock.new(mailing).open?
|
|
next if mailing.mailing_recipients.queued.exists?
|
|
|
|
recipient = mailing.mailing_recipients.pending.order(:id).first
|
|
next unless recipient
|
|
|
|
SendMailingRecipientJob.perform_later(recipient.id)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def recover_stale_queued!
|
|
MailingRecipient.queued.where("updated_at < ?", STALE_QUEUED_AFTER.ago).find_each do |recipient|
|
|
next unless recipient.mailing.sending?
|
|
|
|
recipient.update!(status: "pending", error_message: nil)
|
|
end
|
|
end
|
|
end
|