# 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] || {} @records = [] end def call fetch_records filter_records sort_records paginate_records @records end private def fetch_records raise NotImplementedError end 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 return unless @params[:order] && sortable_columns[order_params[:column].to_sym].present? sort_by = "#{sortable_columns[order_params[:column].to_sym]} #{sort_direction(order_params)}" @records = @records.order(sort_by).order(:id) end end end