diff --git a/ee/changelogs/unreleased/refactoring-ee-entities-15.yml b/ee/changelogs/unreleased/refactoring-ee-entities-15.yml new file mode 100644 index 0000000000000000000000000000000000000000..5f099037c73156dfb01079da1c8f7db9c9e26d8e --- /dev/null +++ b/ee/changelogs/unreleased/refactoring-ee-entities-15.yml @@ -0,0 +1,5 @@ +--- +title: Separate code review, design and group modules into own class files +merge_request: 27860 +author: Rajendra Kadam +type: added diff --git a/ee/lib/ee/api/entities.rb b/ee/lib/ee/api/entities.rb index 0d464f02d487b131134bda4a6010b0bccb2918fd..a66b803ffed1ad3727791adf65cfcd77f2be2d24 100644 --- a/ee/lib/ee/api/entities.rb +++ b/ee/lib/ee/api/entities.rb @@ -3,37 +3,9 @@ module EE module API module Entities - module ProtectedBranch - extend ActiveSupport::Concern - - prepended do - expose :unprotect_access_levels, using: ::API::Entities::ProtectedRefAccess - expose :code_owner_approval_required - end - end - - module IssueBasic - extend ActiveSupport::Concern - - prepended do - expose :weight, if: ->(issue, _) { issue.supports_weight? } - end - end - ######################## # EE-specific entities # ######################## - module DesignManagement - class Design < Grape::Entity - expose :id - expose :project_id - expose :filename - expose :image_url do |design| - ::Gitlab::UrlBuilder.build(design) - end - end - end - module Nuget class ServiceIndex < Grape::Entity expose :version @@ -96,56 +68,6 @@ class SearchResults < Grape::Entity expose :data, using: EE::API::Entities::Nuget::SearchResult end end - - module Analytics - module CodeReview - class MergeRequest < ::API::Entities::MergeRequestSimple - expose :milestone, using: ::API::Entities::Milestone - expose :author, using: ::API::Entities::UserBasic - expose :approved_by_users, as: :approved_by, using: ::API::Entities::UserBasic - expose :notes_count do |mr| - if options[:issuable_metadata] - # Avoids an N+1 query when metadata is included - options[:issuable_metadata][mr.id].user_notes_count - else - mr.notes.user.count - end - end - expose :review_time do |mr| - time = mr.metrics.review_time - - next unless time - - (time / ActiveSupport::Duration::SECONDS_PER_HOUR).floor - end - expose :diff_stats - - private - - # rubocop: disable CodeReuse/ActiveRecord - def diff_stats - result = { - additions: object.diffs.diff_files.sum(&:added_lines), - deletions: object.diffs.diff_files.sum(&:removed_lines), - commits_count: object.commits_count - } - result[:total] = result[:additions] + result[:deletions] - result - end - # rubocop: enable CodeReuse/ActiveRecord - end - end - - module GroupActivity - class IssuesCount < Grape::Entity - expose :issues_count - end - - class MergeRequestsCount < Grape::Entity - expose :merge_requests_count - end - end - end end end end diff --git a/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb b/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb new file mode 100644 index 0000000000000000000000000000000000000000..eba732ccf931c41593f3ef5122dd90ea684a91c3 --- /dev/null +++ b/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module Analytics + module CodeReview + class MergeRequest < ::API::Entities::MergeRequestSimple + expose :milestone, using: ::API::Entities::Milestone + expose :author, using: ::API::Entities::UserBasic + expose :approved_by_users, as: :approved_by, using: ::API::Entities::UserBasic + expose :notes_count do |mr| + if options[:issuable_metadata] + # Avoids an N+1 query when metadata is included + options[:issuable_metadata][mr.id].user_notes_count + else + mr.notes.user.count + end + end + expose :review_time do |mr| + time = mr.metrics.review_time + + next unless time + + (time / ActiveSupport::Duration::SECONDS_PER_HOUR).floor + end + expose :diff_stats + + private + + # rubocop: disable CodeReuse/ActiveRecord + def diff_stats + result = { + additions: object.diffs.diff_files.sum(&:added_lines), + deletions: object.diffs.diff_files.sum(&:removed_lines), + commits_count: object.commits_count + } + result[:total] = result[:additions] + result[:deletions] + result + end + # rubocop: enable CodeReuse/ActiveRecord + end + end + end + end + end +end diff --git a/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb b/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb new file mode 100644 index 0000000000000000000000000000000000000000..7e0ec790252703e9a932155ad65529f87b036622 --- /dev/null +++ b/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module Analytics + module GroupActivity + class IssuesCount < Grape::Entity + expose :issues_count + end + end + end + end + end +end diff --git a/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb b/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb new file mode 100644 index 0000000000000000000000000000000000000000..8a9ea68665bb6548f7b7959334562d1ef0d4ff00 --- /dev/null +++ b/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module Analytics + module GroupActivity + class MergeRequestsCount < Grape::Entity + expose :merge_requests_count + end + end + end + end + end +end diff --git a/ee/lib/ee/api/entities/design_management/design.rb b/ee/lib/ee/api/entities/design_management/design.rb new file mode 100644 index 0000000000000000000000000000000000000000..9a94f9e23666b0df2dec714f5d96431c04f78867 --- /dev/null +++ b/ee/lib/ee/api/entities/design_management/design.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module DesignManagement + class Design < Grape::Entity + expose :id + expose :project_id + expose :filename + expose :image_url do |design| + ::Gitlab::UrlBuilder.build(design) + end + end + end + end + end +end diff --git a/ee/lib/ee/api/entities/issue_basic.rb b/ee/lib/ee/api/entities/issue_basic.rb new file mode 100644 index 0000000000000000000000000000000000000000..59e0d8ac1fb37e6bae9a7e2362b5d7c8f63c6092 --- /dev/null +++ b/ee/lib/ee/api/entities/issue_basic.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module IssueBasic + extend ActiveSupport::Concern + + prepended do + expose :weight, if: ->(issue, _) { issue.supports_weight? } + end + end + end + end +end diff --git a/ee/lib/ee/api/entities/protected_branch.rb b/ee/lib/ee/api/entities/protected_branch.rb new file mode 100644 index 0000000000000000000000000000000000000000..51944b38aeca8184a12cbde51acb66f8980273e7 --- /dev/null +++ b/ee/lib/ee/api/entities/protected_branch.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module EE + module API + module Entities + module ProtectedBranch + extend ActiveSupport::Concern + + prepended do + expose :unprotect_access_levels, using: ::API::Entities::ProtectedRefAccess + expose :code_owner_approval_required + end + end + end + end +end