62 lines
1.4 KiB
Ruby
62 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Namespaces
|
|
class InviteTeamEmailService
|
|
include Gitlab::Experiment::Dsl
|
|
|
|
TRACK = :invite_team
|
|
DELIVERY_DELAY_IN_MINUTES = 20.minutes
|
|
|
|
def self.send_email(user, group)
|
|
new(user, group).execute
|
|
end
|
|
|
|
def initialize(user, group)
|
|
@group = group
|
|
@user = user
|
|
@sent_email_records = InProductMarketingEmailRecords.new
|
|
end
|
|
|
|
def execute
|
|
return unless user.email_opted_in?
|
|
return unless group.root?
|
|
return unless group.setup_for_company
|
|
|
|
# Exclude group if users other than the creator have already been
|
|
# added/invited
|
|
return unless group.member_count == 1
|
|
|
|
return if email_for_track_sent_to_user?
|
|
|
|
experiment(:invite_team_email, group: group) do |e|
|
|
e.candidate do
|
|
send_email(user, group)
|
|
sent_email_records.add(user, track, series)
|
|
sent_email_records.save!
|
|
end
|
|
|
|
e.record!
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :user, :group, :sent_email_records
|
|
|
|
def send_email(user, group)
|
|
NotificationService.new.in_product_marketing(user.id, group.id, track, series)
|
|
end
|
|
|
|
def track
|
|
TRACK
|
|
end
|
|
|
|
def series
|
|
0
|
|
end
|
|
|
|
def email_for_track_sent_to_user?
|
|
Users::InProductMarketingEmail.for_user_with_track_and_series(user, track, series).present?
|
|
end
|
|
end
|
|
end
|