summaryrefslogtreecommitdiff
path: root/lib/api/entities/issue.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/entities/issue.rb')
-rw-r--r--lib/api/entities/issue.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/api/entities/issue.rb b/lib/api/entities/issue.rb
new file mode 100644
index 00000000000..b7eb22b2aba
--- /dev/null
+++ b/lib/api/entities/issue.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module API
+ module Entities
+ class Issue < IssueBasic
+ include ::API::Helpers::RelatedResourcesHelpers
+
+ 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))
+ end
+
+ expose :notes do |issue|
+ expose_url(api_v4_projects_issues_notes_path(id: issue.project_id, noteable_id: issue.iid))
+ end
+
+ expose :award_emoji do |issue|
+ expose_url(api_v4_projects_issues_award_emoji_path(id: issue.project_id, issue_iid: issue.iid))
+ end
+
+ expose :project do |issue|
+ expose_url(api_v4_projects_path(id: issue.project_id))
+ end
+ end
+
+ expose :references, with: IssuableReferences do |issue|
+ issue
+ end
+
+ # Calculating the value of subscribed field triggers Markdown
+ # processing. We can't do that for multiple issues / merge
+ # requests in a single API request.
+ expose :subscribed, if: -> (_, options) { options.fetch(:include_subscribed, true) } do |issue, options|
+ issue.subscribed?(options[:current_user], options[:project] || issue.project)
+ end
+
+ expose :moved_to_id
+ end
+ end
+end