gitlab-org--gitlab-foss/app/finders/packages/build_infos_finder.rb

69 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