5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'app/services/rails_drips/remove.rb', line 5
def self.call(campaign:, recipient:, reason:, actor: nil, data: {})
campaign = campaign.is_a?(Campaign) ? campaign : Campaign.find_by(key: campaign.to_s)
return Result.new(status: :campaign_not_found) unless campaign
enrollment = campaign.enrollments.open.find_by(recipient: recipient)
return Result.new(status: :not_open, campaign: campaign) unless enrollment
Enrollment.transaction do
enrollment.lock!
enrollment.remove!(reason: reason, actor: actor)
RecordEvent.call(enrollment: enrollment, event_type: "removed", actor: actor,
data: (data || {}).stringify_keys.merge("reason" => reason.to_s))
enrollment.deliveries.scheduled.find_each do |delivery|
delivery.cancel!(reason: :recipient_removed)
RecordEvent.call(enrollment: enrollment, event_type: "delivery_cancelled", actor: actor,
data: { "delivery_id" => delivery.id, "reason" => "recipient_removed" })
end
end
Instrumentation.instrument("enrollment.removed", campaign_key: campaign.key, enrollment_id: enrollment.id)
Result.new(status: :removed, campaign: campaign, enrollment: enrollment)
end
|