mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-16 14:17:00 +08:00
40 lines
931 B
Ruby
40 lines
931 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Lists
|
|
class BaseService
|
|
def initialize(raw_data, params, user: nil)
|
|
@raw_data = raw_data
|
|
@params = params
|
|
@user = user
|
|
@filters = params[:filters] || {}
|
|
end
|
|
|
|
def call
|
|
records = fetch_records
|
|
records = filter_records(records)
|
|
records = sort_records(records)
|
|
paginate_records(records)
|
|
end
|
|
|
|
private
|
|
|
|
def order_params
|
|
@order_params ||= @params.require(:order).permit(:column, :dir).to_h
|
|
end
|
|
|
|
def paginate_records(records)
|
|
records.page(@params[:page]).per(@params[:per_page])
|
|
end
|
|
|
|
def sort_direction(order_params)
|
|
order_params[:dir] == 'asc' ? 'ASC' : 'DESC'
|
|
end
|
|
|
|
def sort_records(records)
|
|
return records unless @params[:order]
|
|
|
|
sort_by = "#{sortable_columns[order_params[:column].to_sym]} #{sort_direction(order_params)}"
|
|
records.order(sort_by)
|
|
end
|
|
end
|
|
end
|