23 lines
712 B
Ruby
23 lines
712 B
Ruby
class RetryFailedSmsJob < ApplicationJob
|
|
queue_as :default
|
|
|
|
def perform(sms_message_id)
|
|
sms = SmsMessage.find(sms_message_id)
|
|
|
|
# Only retry if message can be retried
|
|
return unless sms.can_retry?
|
|
|
|
# Reset status to queued and increment retry count
|
|
sms.increment_retry!
|
|
sms.update!(status: "queued", error_message: nil)
|
|
|
|
# Re-queue for sending with exponential backoff
|
|
wait_time = (2 ** sms.retry_count).minutes
|
|
SendSmsJob.set(wait: wait_time).perform_later(sms.id)
|
|
|
|
Rails.logger.info("Retrying failed SMS #{sms.message_id} (attempt #{sms.retry_count})")
|
|
rescue ActiveRecord::RecordNotFound => e
|
|
Rails.logger.error("SMS message not found: #{e.message}")
|
|
end
|
|
end
|