77 lines
1.9 KiB
Ruby
77 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module Helpers
|
|
module IssuesHelpers
|
|
extend Grape::API::Helpers
|
|
|
|
params :optional_issue_params_ee do
|
|
end
|
|
|
|
params :optional_issues_params_ee do
|
|
end
|
|
|
|
params :optional_issue_not_params_ee do
|
|
end
|
|
|
|
def self.update_params_at_least_one_of
|
|
[
|
|
:assignee_id,
|
|
:assignee_ids,
|
|
:confidential,
|
|
:created_at,
|
|
:description,
|
|
:discussion_locked,
|
|
:due_date,
|
|
:labels,
|
|
:add_labels,
|
|
:remove_labels,
|
|
:milestone_id,
|
|
:state_event,
|
|
:title
|
|
]
|
|
end
|
|
|
|
def self.sort_options
|
|
%w[created_at updated_at priority due_date relative_position label_priority milestone_due popularity]
|
|
end
|
|
|
|
def issue_finder(args = {})
|
|
args = declared_params.merge(args)
|
|
|
|
args.delete(:id)
|
|
args[:not] ||= {}
|
|
args[:milestone_title] ||= args.delete(:milestone)
|
|
args[:not][:milestone_title] ||= args[:not]&.delete(:milestone)
|
|
args[:label_name] ||= args.delete(:labels)
|
|
args[:not][:label_name] ||= args[:not]&.delete(:labels)
|
|
args[:scope] = args[:scope].underscore if args[:scope]
|
|
args[:sort] = "#{args[:order_by]}_#{args[:sort]}"
|
|
|
|
IssuesFinder.new(current_user, args)
|
|
end
|
|
|
|
def find_issues(args = {})
|
|
finder = issue_finder(args)
|
|
finder.execute.with_api_entity_associations
|
|
end
|
|
|
|
def issues_statistics(args = {})
|
|
finder = issue_finder(args)
|
|
counter = Gitlab::IssuablesCountForState.new(finder)
|
|
|
|
{
|
|
statistics: {
|
|
counts: {
|
|
all: counter[:all],
|
|
closed: counter[:closed],
|
|
opened: counter[:opened]
|
|
}
|
|
}
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
API::Helpers::IssuesHelpers.prepend_if_ee('EE::API::Helpers::IssuesHelpers')
|