diff options
author | Nihad Abbasov <narkoz.2008@gmail.com> | 2012-09-21 03:23:17 -0700 |
---|---|---|
committer | Nihad Abbasov <narkoz.2008@gmail.com> | 2012-09-21 03:23:17 -0700 |
commit | 25b745271a1db25fc709ae13737b04c1f94cdb95 (patch) | |
tree | a8d1d5fb58cd5b7f3ef2e2a0af72a0da385125d6 /lib/api | |
parent | 49fe8fed11d5a8b73e15b507b214ea10b61524a5 (diff) | |
download | gitlab-ce-25b745271a1db25fc709ae13737b04c1f94cdb95.tar.gz |
add API for project team members
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/entities.rb | 7 | ||||
-rw-r--r-- | lib/api/projects.rb | 93 |
2 files changed, 64 insertions, 36 deletions
diff --git a/lib/api/entities.rb b/lib/api/entities.rb index a8b786aebb0..9e5723245dc 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -24,9 +24,10 @@ module Gitlab expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at end - class UsersProject < Grape::Entity - expose :user, using: Entities::UserBasic - expose :project_access + class ProjectMember < UserBasic + expose :project_access, :as => :access_level do |user, options| + options[:project].users_projects.find_by_user_id(user.id).project_access + end end class RepoObject < Grape::Entity diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 1d9004f8eed..456b8a7714d 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -40,14 +40,14 @@ module Gitlab post do params[:code] ||= params[:name] params[:path] ||= params[:name] - attrs = attributes_for_keys [:code, - :path, - :name, - :description, - :default_branch, - :issues_enabled, - :wall_enabled, - :merge_requests_enabled, + attrs = attributes_for_keys [:code, + :path, + :name, + :description, + :default_branch, + :issues_enabled, + :wall_enabled, + :merge_requests_enabled, :wiki_enabled] @project = Project.create_by_user(attrs, current_user) if @project.saved? @@ -57,56 +57,83 @@ module Gitlab end end - # Get project users + # Get a project team members # # Parameters: # id (required) - The ID or code name of a project # Example Request: - # GET /projects/:id/users - get ":id/users" do - @users_projects = paginate user_project.users_projects - present @users_projects, with: Entities::UsersProject + # GET /projects/:id/members + get ":id/members" do + @members = paginate user_project.users + present @members, with: Entities::ProjectMember, project: user_project end - # Add users to project with specified access level + # Get a project team members # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to add - # project_access (required) - Project access level + # user_id (required) - The ID of a user # Example Request: - # POST /projects/:id/users - post ":id/users" do + # GET /projects/:id/members/:user_id + get ":id/members/:user_id" do + @member = user_project.users.find params[:user_id] + present @member, with: Entities::ProjectMember, project: user_project + end + + # Add a new project team member + # + # Parameters: + # id (required) - The ID or code name of a project + # user_id (required) - The ID of a user + # access_level (required) - Project access level + # Example Request: + # POST /projects/:id/members + post ":id/members" do authorize! :admin_project, user_project - user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) - nil + 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 + present @member, with: Entities::ProjectMember, project: user_project + else + not_found! + end end - # Update users to specified access level + # Update project team member # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to add - # project_access (required) - New project access level to + # user_id (required) - The ID of a team member + # access_level (required) - Project access level # Example Request: - # PUT /projects/:id/add_users - put ":id/users" do + # PUT /projects/:id/members/:user_id + put ":id/members/:user_id" do authorize! :admin_project, user_project - user_project.update_users_ids_to_role(params[:user_ids].values, params[:project_access]) - nil + 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 + present @member, with: Entities::ProjectMember, project: user_project + else + not_found! + end end - # Delete project users + # Remove a team member from project # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to delete + # user_id (required) - The ID of a team member # Example Request: - # DELETE /projects/:id/users - delete ":id/users" do + # DELETE /projects/:id/members/:user_id + delete ":id/members/:user_id" do authorize! :admin_project, user_project - user_project.delete_users_ids_from_team(params[:user_ids].values) - nil + users_project = user_project.users_projects.find_by_user_id params[:user_id] + users_project.destroy end # Get project hooks |