Skip to content
Snippets Groups Projects

Experiment: "Build iOS app guide" email campaign

Merged Eugie Limpin requested to merge experiment/publish-ios-apps-with-fastlane into master
5 files
+ 153
80
Compare changes
  • Side-by-side
  • Inline
Files
5
# frozen_string_literal: true
module Users
module Projects
class InProductMarketingCampaignEmailsService
def initialize(user, campaign)
@user = user
def initialize(project, campaign)
@project = project
@campaign = campaign
@sent_email_records = ::Namespaces::InProductMarketingEmailRecords.new
end
def execute
return unless user_can_receive_marketing_emails?
return if campaign_email_already_sent_to_user?
send_email
send_emails
end
private
attr_reader :user, :campaign
attr_reader :project, :campaign, :sent_email_records
def send_emails
project_users.each do |user|
send_email(user)
end
def user_can_receive_marketing_emails?
user.can?(:receive_notifications) && user.email_opted_in?
sent_email_records.save!
end
def campaign_email_already_sent_to_user?
Users::InProductMarketingEmail.for_user_with_campaign(user, campaign).present?
def project_users
project.users
.where(email_opted_in: true)
.merge(Users::InProductMarketingEmail.without_campaign(campaign))
end
def send_email
def send_email(user)
return unless user.can?(:receive_notifications)
Notify.build_ios_app_guide_email(user.notification_email_or_default).deliver_later
Users::InProductMarketingEmail.create(user: user, campaign: campaign)
sent_email_records.add(user, campaign: campaign)
end
end
end
Loading