summaryrefslogtreecommitdiff
path: root/app/services/namespaces/invite_team_email_service.rb
blob: 45975d1953a88d409690e2d152de3a138a8a2317 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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