Class: Campaign::AssignCustomersToAudience

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/campaign/assign_customers_to_audience.rb

Overview

Assigns and merge a list a of customer_id into an existing audience

Defined Under Namespace

Classes: Result

Instance Attribute Summary

Attributes inherited from BaseService

#options

Instance Method Summary collapse

Methods inherited from BaseService

#initialize, #log_debug, #log_error, #log_info, #log_warning, #logger, #tagged_logger

Constructor Details

This class inherits a constructor from BaseService

Instance Method Details

#process(audience, customer_ids = []) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'app/services/campaign/assign_customers_to_audience.rb', line 10

def process(audience, customer_ids = [])
  existing_customer_ids = audience.audience_members.pluck(:customer_id)
  new_customer_ids = (customer_ids - existing_customer_ids)
  # Per-record create runs AudienceMember validations + before_save :populate_email_if_missing
  # so that email-type audiences get email_address backfilled from the customer.
  new_customer_ids.each do |new_customer_id|
    AudienceMember.create(active: true, audience_id: audience.id, customer_id: new_customer_id)
  end
  Result.new(subscribed: true, messages: [], new_audience_members: new_customer_ids.size, existing_audience_members: existing_customer_ids.size)
end