2018-09-29 22:34:47 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-11-21 19:15:46 +00:00
|
|
|
module API
|
|
|
|
# Concern for declare pagination params.
|
|
|
|
#
|
|
|
|
# @example
|
2020-06-29 21:09:07 +00:00
|
|
|
# class CustomApiResource < Grape::API::Instance
|
2016-11-21 19:15:46 +00:00
|
|
|
# include PaginationParams
|
|
|
|
#
|
|
|
|
# params do
|
|
|
|
# use :pagination
|
|
|
|
# end
|
|
|
|
# end
|
|
|
|
module PaginationParams
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
included do
|
|
|
|
helpers do
|
|
|
|
params :pagination do
|
2022-11-09 12:07:48 +00:00
|
|
|
optional :page, type: Integer, default: 1, desc: 'Current page number', documentation: { example: 1 }
|
|
|
|
optional :per_page, type: Integer, default: 20,
|
|
|
|
desc: 'Number of items per page', except_values: [0], documentation: { example: 20 }
|
2016-11-21 19:15:46 +00:00
|
|
|
end
|
2022-08-04 21:08:44 +00:00
|
|
|
|
|
|
|
def verify_pagination_params!
|
|
|
|
return if Feature.disabled?(:only_positive_pagination_values)
|
|
|
|
|
|
|
|
page = begin
|
|
|
|
Integer(params[:page])
|
|
|
|
rescue ArgumentError, TypeError
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
return render_structured_api_error!({ error: 'page does not have a valid value' }, 400) if page&.< 1
|
|
|
|
|
|
|
|
per_page = begin
|
|
|
|
Integer(params[:per_page])
|
|
|
|
rescue ArgumentError, TypeError
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
return render_structured_api_error!({ error: 'per_page does not have a valid value' }, 400) if per_page&.< 1
|
|
|
|
end
|
2016-11-21 19:15:46 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|