Class: RailsDrips::ArchiveCampaign

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

Class Method Summary collapse

Class Method Details

.call(campaign:, reason: nil, actor: nil) ⇒ Object



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