Class: RailsDrips::RetryDelivery

Inherits:
Object
  • Object
show all
Defined in:
app/services/rails_drips/retry_delivery.rb

Class Method Summary collapse

Class Method Details

.call(delivery:, actor: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'app/services/rails_drips/retry_delivery.rb', line 5

def self.call(delivery:, actor: nil)
  delivery.with_lock do
    enrollment = delivery.enrollment
    unless delivery.failed? && enrollment.active? && enrollment.campaign.active?
      return Result.new(status: :not_retryable, delivery: delivery, enrollment: enrollment)
    end

    delivery.update!(status: :scheduled, scheduled_for: RailsDrips.configuration.current_time,
      failed_at: nil, last_error: nil)
    RecordEvent.call(enrollment: enrollment, event_type: "delivery_retried", actor: actor,
      data: { "delivery_id" => delivery.id })
  end
  RailsDrips.configuration.delivery_job.perform_later(delivery.id)
  Result.new(status: :retried, delivery: delivery, enrollment: delivery.enrollment)
end