diff options
Diffstat (limited to 'app/services/namespaces/invite_team_email_service.rb')
-rw-r--r-- | app/services/namespaces/invite_team_email_service.rb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/app/services/namespaces/invite_team_email_service.rb b/app/services/namespaces/invite_team_email_service.rb new file mode 100644 index 00000000000..45975d1953a --- /dev/null +++ b/app/services/namespaces/invite_team_email_service.rb @@ -0,0 +1,62 @@ +# 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 |