Files
MySMSAPio/app/jobs/retry_failed_sms_job.rb
2025-10-22 17:22:17 +08:00

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