From 9983cd726807cdffb0d717f74a16e88f1d875903 Mon Sep 17 00:00:00 2001 From: Ruben Davila Date: Fri, 19 May 2017 23:21:34 -0500 Subject: Add members_count attribute to payload for groups API --- app/models/group.rb | 2 ++ changelogs/unreleased/add-members-count-to-groups-api.yml | 4 ++++ doc/api/groups.md | 3 +++ lib/api/entities.rb | 11 ++++++++--- lib/api/groups.rb | 2 +- spec/requests/api/groups_spec.rb | 1 + 6 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 changelogs/unreleased/add-members-count-to-groups-api.yml 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) -- cgit v1.2.1