91 lines
2.3 KiB
Ruby
91 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module Helpers
|
|
module IssuesHelpers
|
|
extend Grape::API::Helpers
|
|
|
|
params :negatable_issue_filter_params_ee do
|
|
end
|
|
|
|
params :optional_issue_params_ee do
|
|
end
|
|
|
|
params :issues_stats_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,
|
|
:issue_type
|
|
]
|
|
end
|
|
|
|
def self.sort_options
|
|
%w[
|
|
created_at
|
|
due_date
|
|
label_priority
|
|
milestone_due
|
|
popularity
|
|
priority
|
|
relative_position
|
|
title
|
|
updated_at
|
|
]
|
|
end
|
|
|
|
def issue_finder(args = {})
|
|
args = declared_params.merge(args)
|
|
|
|
args.delete(:id)
|
|
args[:not] ||= {}
|
|
args[:milestone_title] ||= args.delete(:milestone)
|
|
args[:milestone_wildcard_id] ||= args.delete(:milestone_id)
|
|
args[:not][:milestone_title] ||= args[:not].delete(:milestone)
|
|
args[:not][:milestone_wildcard_id] ||= args[:not].delete(:milestone_id)
|
|
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]}"
|
|
args[:issue_types] ||= args.delete(:issue_type) || WorkItems::Type.allowed_types_for_issues
|
|
|
|
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_mod_with('API::Helpers::IssuesHelpers')
|