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:
authorAlexandru Croitor <acroitor@gitlab.com>2019-04-19 10:55:36 +0300
committerAlexandru Croitor <acroitor@gitlab.com>2019-05-15 10:15:17 +0300
commita4fbf39eca4518598e893f6f1b81b8b69927c6f9 (patch)
treec3316c3813ec60b4a14bb05a3eb047d64719f083 /lib
parent5ec28dc387fb4adc3c5b65ac47819a8663186954 (diff)
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.rb27
-rw-r--r--lib/api/helpers/issues_helpers.rb1
-rw-r--r--lib/api/issues.rb12
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,