5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'app/services/rails_drips/archive_campaign.rb', line 5
def self.call(campaign:, reason: nil, actor: nil)
campaign = campaign.is_a?(Campaign) ? campaign : Campaign.find_by(key: campaign.to_s)
return Result.new(status: :campaign_not_found) unless campaign
return Result.new(status: :already_archived, campaign: campaign) if campaign.archived?
Campaign.transaction do
campaign.update!(status: :archived)
campaign.enrollments.open.find_each do |enrollment|
enrollment.deliveries.scheduled.find_each { |delivery| delivery.cancel!(reason: :campaign_archived) }
RecordEvent.call(enrollment: enrollment, event_type: "campaign_archived", actor: actor,
data: { "reason" => reason }.compact)
end
end
Instrumentation.instrument("campaign.archived", campaign_id: campaign.id)
Result.new(status: :archived, campaign: campaign)
end
|