Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNihad Abbasov <narkoz.2008@gmail.com>2012-09-21 14:23:17 +0400
committerNihad Abbasov <narkoz.2008@gmail.com>2012-09-21 14:23:17 +0400
commit25b745271a1db25fc709ae13737b04c1f94cdb95 (patch)
treea8d1d5fb58cd5b7f3ef2e2a0af72a0da385125d6 /lib
parent49fe8fed11d5a8b73e15b507b214ea10b61524a5 (diff)
add API for project team members
Diffstat (limited to 'lib')
-rw-r--r--lib/api/entities.rb7
-rw-r--r--lib/api/projects.rb93
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