diff options
author | Alexandru Croitor <acroitor@gitlab.com> | 2019-04-19 10:55:36 +0300 |
---|---|---|
committer | Alexandru Croitor <acroitor@gitlab.com> | 2019-05-15 10:15:17 +0300 |
commit | a4fbf39eca4518598e893f6f1b81b8b69927c6f9 (patch) | |
tree | c3316c3813ec60b4a14bb05a3eb047d64719f083 /lib | |
parent | 5ec28dc387fb4adc3c5b65ac47819a8663186954 (diff) | |
download | gitlab-ce-a4fbf39eca4518598e893f6f1b81b8b69927c6f9.tar.gz |
Move issue details to from IssueBasic to Issue entity
Cleanup IssueBasic entity to keep it basic and move extra attributes
to Issue entity which contains more details
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/entities.rb | 27 | ||||
-rw-r--r-- | lib/api/helpers/issues_helpers.rb | 1 | ||||
-rw-r--r-- | lib/api/issues.rb | 12 |
3 files changed, 26 insertions, 14 deletions
diff --git a/lib/api/entities.rb b/lib/api/entities.rb index a57c7e9f851..1f10dc6c0fc 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -542,13 +542,9 @@ module API class IssueBasic < ProjectEntity expose :closed_at expose :closed_by, using: Entities::UserBasic - expose :labels do |issue, options| + expose :labels do |issue| # Avoids an N+1 query since labels are preloaded - if options[:with_labels_data] - ::API::Entities::LabelBasic.represent(issue.labels.sort_by(&:title)) - else - issue.labels.map(&:title).sort - end + issue.labels.map(&:title).sort end expose :milestone, using: Entities::Milestone expose :assignees, :author, using: Entities::UserBasic @@ -564,8 +560,6 @@ module API expose :due_date expose :confidential expose :discussion_locked - expose(:has_tasks) {|issue, _| !issue.task_list_items.empty? } - expose :task_status, if: -> (issue, _) { !issue.task_list_items.empty? } expose :web_url do |issue| Gitlab::UrlBuilder.build(issue) @@ -579,6 +573,23 @@ module API class Issue < IssueBasic include ::API::Helpers::RelatedResourcesHelpers + expose :labels do |issue, options| + # Avoids an N+1 query since labels are preloaded + if options[:with_labels_data] + ::API::Entities::LabelBasic.represent(issue.labels.sort_by(&:title)) + else + issue.labels.map(&:title).sort + end + end + + expose(:has_tasks) do |issue, _| + !issue.task_list_items.empty? + end + + expose :task_status, if: -> (issue, _) do + !issue.task_list_items.empty? + end + expose :_links do expose :self do |issue| expose_url(api_v4_project_issue_path(id: issue.project_id, issue_iid: issue.iid)) diff --git a/lib/api/helpers/issues_helpers.rb b/lib/api/helpers/issues_helpers.rb index 00aaf5243b7..12bbc598532 100644 --- a/lib/api/helpers/issues_helpers.rb +++ b/lib/api/helpers/issues_helpers.rb @@ -37,6 +37,7 @@ module API issues = finder.execute.with_api_entity_associations order_by = declared_params[:sort].present? && %w(asc desc).include?(declared_params[:sort].downcase) issues = issues.reorder(order_options_with_tie_breaker) if order_by + issues # rubocop: enable CodeReuse/ActiveRecord end diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 67da1c46480..6977657e356 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -82,7 +82,7 @@ module API resource :issues do desc "Get currently authenticated user's issues" do - success Entities::IssueBasic + success Entities::Issue end params do use :issues_params @@ -94,7 +94,7 @@ module API issues = paginate(find_issues) options = { - with: Entities::IssueBasic, + with: Entities::Issue, with_labels_data: declared_params[:with_labels_data], current_user: current_user, issuable_metadata: issuable_meta_data(issues, 'Issue') @@ -109,7 +109,7 @@ module API end resource :groups, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do desc 'Get a list of group issues' do - success Entities::IssueBasic + success Entities::Issue end params do use :issues_params @@ -120,7 +120,7 @@ module API issues = paginate(find_issues(group_id: group.id, include_subgroups: true)) options = { - with: Entities::IssueBasic, + with: Entities::Issue, with_labels_data: declared_params[:with_labels_data], current_user: current_user, issuable_metadata: issuable_meta_data(issues, 'Issue') @@ -149,7 +149,7 @@ module API include TimeTrackingEndpoints desc 'Get a list of project issues' do - success Entities::IssueBasic + success Entities::Issue end params do use :issues_params @@ -160,7 +160,7 @@ module API issues = paginate(find_issues(project_id: project.id)) options = { - with: Entities::IssueBasic, + with: Entities::Issue, with_labels_data: declared_params[:with_labels_data], current_user: current_user, project: user_project, |