diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-02-20 15:41:50 +0300 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-02-20 15:41:50 +0300 |
commit | 444d71e043eb19979ec1b08504b2760910cb2a47 (patch) | |
tree | eae73ba8a12de1a84faee800fae9749b70ed1b78 /app/services | |
parent | 549fc3469790da388035de713294f335fbfb4fb5 (diff) |
Transactional mattermost team creation
Before this commit, but still on this feature branch, the creation of
mattermost teams where a background job. However, it was decided it was
better that these happened as transaction so feedback could be displayed
to the user.
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/groups/create_service.rb | 21 | ||||
-rw-r--r-- | app/services/mattermost/create_team_service.rb | 15 |
2 files changed, 28 insertions, 8 deletions
diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb index 13d1b545498..3028025fc6e 100644 --- a/app/services/groups/create_service.rb +++ b/app/services/groups/create_service.rb @@ -2,12 +2,10 @@ module Groups class CreateService < Groups::BaseService def initialize(user, params = {}) @current_user, @params = user, params.dup + @chat_team = @params.delete(:create_chat_team) end def execute - create_chat_team = params.delete(:create_chat_team) - team_name = params.delete(:chat_team_name) - @group = Group.new(params) unless Gitlab::VisibilityLevel.allowed_for?(current_user, params[:visibility_level]) @@ -23,15 +21,22 @@ module Groups end @group.name ||= @group.path.dup - @group.save - @group.add_owner(current_user) - if create_chat_team && Gitlab.config.mattermost.enabled - options = team_name ? { name: team_name } : {} - Mattermost::CreateTeamWorker.perform_async(@group.id, current_user.id, options) + if create_chat_team? + Mattermost::CreateTeamService.new(@group, current_user).execute + + return @group if @group.errors.any? end + @group.save + @group.add_owner(current_user) @group end + + private + + def create_chat_team? + @chat_team && Gitlab.config.mattermost.enabled + end end end diff --git a/app/services/mattermost/create_team_service.rb b/app/services/mattermost/create_team_service.rb new file mode 100644 index 00000000000..199d15aee92 --- /dev/null +++ b/app/services/mattermost/create_team_service.rb @@ -0,0 +1,15 @@ +module Mattermost + class CreateTeamService < ::BaseService + def initialize(group, current_user) + @group, @current_user = group, current_user + end + + def execute + # The user that creates the team will be Team Admin + response = Mattermost::Team.new(current_user).create(@group) + @group.build_chat_team(name: response['name'], team_id: response['id']) + rescue Mattermost::ClientError => e + @group.errors.add(:chat_team, e.message) + end + end +end |