summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Davila <rdavila84@gmail.com>2017-05-19 23:21:34 -0500
committerRuben Davila <rdavila84@gmail.com>2017-05-19 23:21:34 -0500
commit9983cd726807cdffb0d717f74a16e88f1d875903 (patch)
treebc34ad2f6026f8cf8d3c2afb8a47e1e9575f4e06
parentbdf62a19d2cdbdfe554eb73500fd5fe4744161b1 (diff)
downloadgitlab-ce-include-members-count-in-groups-api.tar.gz
Add members_count attribute to payload for groups APIinclude-members-count-in-groups-api
-rw-r--r--app/models/group.rb2
-rw-r--r--changelogs/unreleased/add-members-count-to-groups-api.yml4
-rw-r--r--doc/api/groups.md3
-rw-r--r--lib/api/entities.rb11
-rw-r--r--lib/api/groups.rb2
-rw-r--r--spec/requests/api/groups_spec.rb1
6 files changed, 19 insertions, 4 deletions
diff --git a/app/models/group.rb b/app/models/group.rb
index 6aab477f431..95935642cf9 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -33,6 +33,8 @@ class Group < Namespace
mount_uploader :avatar, AvatarUploader
has_many :uploads, as: :model, dependent: :destroy
+ scope :with_members, -> { includes(:group_members) }
+
after_create :post_create_hook
after_destroy :post_destroy_hook
after_save :update_two_factor_requirement
diff --git a/changelogs/unreleased/add-members-count-to-groups-api.yml b/changelogs/unreleased/add-members-count-to-groups-api.yml
new file mode 100644
index 00000000000..ee4fa02615b
--- /dev/null
+++ b/changelogs/unreleased/add-members-count-to-groups-api.yml
@@ -0,0 +1,4 @@
+---
+title: Add members_count attribute to payload for groups API
+merge_request:
+author:
diff --git a/doc/api/groups.md b/doc/api/groups.md
index 2b3d8e125c8..1d152f0414f 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -29,6 +29,7 @@ GET /groups
"description": "An interesting group",
"visibility": "public",
"lfs_enabled": true,
+ "members_count": 1,
"avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",
"web_url": "http://localhost:3000/groups/foo-bar",
"request_access_enabled": false,
@@ -130,6 +131,8 @@ Example response:
```json
{
"id": 4,
+ "lfs_enabled": true,
+ "members_count": 1,
"name": "Twitter",
"path": "twitter",
"description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est.",
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 01cc8e8e1ca..6bc76ce6cef 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -146,14 +146,19 @@ module API
class Group < Grape::Entity
expose :id, :name, :path, :description, :visibility
expose :lfs_enabled?, as: :lfs_enabled
- expose :avatar_url do |user, options|
- user.avatar_url(only_path: false)
- end
expose :web_url
expose :request_access_enabled
expose :full_name, :full_path
expose :parent_id
+ expose :members_count do |group, options|
+ group.members.size
+ end
+
+ expose :avatar_url do |group, options|
+ group.avatar_url(only_path: false)
+ end
+
expose :statistics, if: :statistics do
with_options format_with: -> (value) { value.to_i } do
expose :storage_size
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index 3da7d735da8..51a2df9bf6b 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -61,7 +61,7 @@ module API
groups = groups.where.not(id: params[:skip_groups]) if params[:skip_groups].present?
groups = groups.reorder(params[:order_by] => params[:sort])
- present_groups groups, statistics: params[:statistics] && current_user.admin?
+ present_groups groups.with_members, statistics: params[:statistics] && current_user.admin?
end
desc 'Create a group. Available only for users who can create groups.' do
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 90b36374ded..40cb9b1c5b4 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -186,6 +186,7 @@ describe API::Groups do
expect(json_response['parent_id']).to eq(group1.parent_id)
expect(json_response['projects']).to be_an Array
expect(json_response['projects'].length).to eq(2)
+ expect(json_response['members_count']).to eq(1)
expect(json_response['shared_projects']).to be_an Array
expect(json_response['shared_projects'].length).to eq(1)
expect(json_response['shared_projects'][0]['id']).to eq(project.id)