summaryrefslogtreecommitdiff
path: root/lib/api/projects.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/projects.rb')
-rw-r--r--lib/api/projects.rb35
1 files changed, 26 insertions, 9 deletions
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 47ab4e1aab0..e6df6b4ee88 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -89,15 +89,26 @@ module Gitlab
# POST /projects/:id/members
post ":id/members" do
authorize! :admin_project, user_project
- users_project = user_project.users_projects.new(
- user_id: params[:user_id],
- project_access: params[:access_level]
- )
- if users_project.save
- @member = users_project.user
+ error!("User id not given", 400) if !params.has_key? :user_id
+ error!("Access level not given", 400) if !params.has_key? :access_level
+
+ # either the user is already a team member or a new one
+ team_member = user_project.team_member_by_id(params[:user_id])
+ if team_member.nil?
+ team_member = user_project.users_projects.new(
+ user_id: params[:user_id],
+ project_access: params[:access_level]
+ )
+ end
+
+ if team_member.save
+ @member = team_member.user
present @member, with: Entities::ProjectMember, project: user_project
else
+ if team_member.errors[:project_access].any?
+ error!(team_member.errors[:project_access], 422)
+ end
not_found!
end
end
@@ -112,12 +123,18 @@ module Gitlab
# PUT /projects/:id/members/:user_id
put ":id/members/:user_id" do
authorize! :admin_project, user_project
- users_project = user_project.users_projects.find_by_user_id params[:user_id]
- if users_project.update_attributes(project_access: params[:access_level])
- @member = users_project.user
+ team_member = user_project.users_projects.find_by_user_id(params[:user_id])
+ error!("Access level not given", 400) if !params.has_key? :access_level
+ error!("User can not be found", 404) if team_member.nil?
+
+ if team_member.update_attributes(project_access: params[:access_level])
+ @member = team_member.user
present @member, with: Entities::ProjectMember, project: user_project
else
+ if team_member.errors[:project_access].any?
+ error!(team_member.errors[:project_access], 422)
+ end
not_found!
end
end