diff options
Diffstat (limited to 'app/services/members/create_service.rb')
-rw-r--r-- | app/services/members/create_service.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/app/services/members/create_service.rb b/app/services/members/create_service.rb index 7b81cc27635..5d3c4a5c54a 100644 --- a/app/services/members/create_service.rb +++ b/app/services/members/create_service.rb @@ -16,6 +16,7 @@ module Members end def execute + validate_invite_source! validate_invites! add_members @@ -33,6 +34,10 @@ module Members params[:user_ids] end + def validate_invite_source! + raise ArgumentError, s_('AddMember|No invite source provided.') unless invite_source.present? + end + def validate_invites! raise BlankInvitesError, blank_invites_message if invites.blank? @@ -72,6 +77,23 @@ module Members errors << "#{prefix}#{member.errors.full_messages.to_sentence}" end + def after_execute(member:) + super + + Gitlab::Tracking.event(self.class.name, 'create_member', label: invite_source, property: tracking_property(member), user: current_user) + end + + def invite_source + params[:invite_source] + end + + def tracking_property(member) + # ideally invites go down the invite service class instead, but there is nothing that limits an invite + # from being used in this class and if you send emails as a comma separated list to the api/members + # endpoint, it will support invites + member.invite? ? 'net_new_user' : 'existing_user' + end + def user_limit limit = params.fetch(:limit, DEFAULT_INVITE_LIMIT) |