gitlab-org--gitlab-foss/lib/gitlab/zentao/query.rb

78 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Zentao
class Query
STATUSES = %w[all opened closed].freeze
ISSUES_DEFAULT_LIMIT = 20
ISSUES_MAX_LIMIT = 50
attr_reader :client, :params
def initialize(integration, params)
@client = Client.new(integration)
@params = params
end
def issues
issues_response = client.fetch_issues(query_options)
return [] if issues_response.blank?
Kaminari.paginate_array(
issues_response['issues'],
limit: issues_response['limit'],
total_count: issues_response['total']
)
end
def issue
issue_response = client.fetch_issue(params[:id])
issue_response['issue']
end
private
def query_options
{
order: query_order,
status: query_status,
labels: query_labels,
page: query_page,
limit: query_limit,
search: query_search
}
end
def query_page
params[:page].presence || 1
end
def query_limit
limit = params[:limit].presence || ISSUES_DEFAULT_LIMIT
[limit.to_i, ISSUES_MAX_LIMIT].min
end
def query_search
params[:search] || ''
end
def query_order
key, order = params['sort'].to_s.split('_', 2)
zentao_key = (key == 'created' ? 'openedDate' : 'lastEditedDate')
zentao_order = (order == 'asc' ? 'asc' : 'desc')
"#{zentao_key}_#{zentao_order}"
end
def query_status
return params[:state] if params[:state].present? && params[:state].in?(STATUSES)
'opened'
end
def query_labels
(params[:labels].presence || []).join(',')
end
end
end
end