68 lines
1.3 KiB
Ruby
68 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Packages
|
|
class BuildInfosFinder
|
|
MAX_PAGE_SIZE = 100
|
|
|
|
def initialize(package, params)
|
|
@package = package
|
|
@params = params
|
|
end
|
|
|
|
def execute
|
|
build_infos = @package.build_infos.without_empty_pipelines
|
|
build_infos = apply_order(build_infos)
|
|
build_infos = apply_limit(build_infos)
|
|
apply_cursor(build_infos)
|
|
end
|
|
|
|
private
|
|
|
|
def apply_order(build_infos)
|
|
order_direction = :desc
|
|
order_direction = :asc if last
|
|
|
|
build_infos.order_by_pipeline_id(order_direction)
|
|
end
|
|
|
|
def apply_limit(build_infos)
|
|
limit = [first, last, max_page_size, MAX_PAGE_SIZE].compact.min
|
|
limit += 1 if support_next_page
|
|
build_infos.limit(limit)
|
|
end
|
|
|
|
def apply_cursor(build_infos)
|
|
if before
|
|
build_infos.with_pipeline_id_greater_than(before)
|
|
elsif after
|
|
build_infos.with_pipeline_id_less_than(after)
|
|
else
|
|
build_infos
|
|
end
|
|
end
|
|
|
|
def first
|
|
@params[:first]
|
|
end
|
|
|
|
def last
|
|
@params[:last]
|
|
end
|
|
|
|
def max_page_size
|
|
@params[:max_page_size]
|
|
end
|
|
|
|
def before
|
|
@params[:before]
|
|
end
|
|
|
|
def after
|
|
@params[:after]
|
|
end
|
|
|
|
def support_next_page
|
|
@params[:support_next_page]
|
|
end
|
|
end
|
|
end
|