- |> restrict(:min_id, options)
- |> restrict(:since_id, options)
- |> restrict(:max_id, options)
- |> restrict(:order, options)
- |> restrict(:limit, options)
+ |> paginate(options, :offset, table_binding)
+ |> Repo.all()
+ end
+
+ @spec paginate(Ecto.Query.t(), map(), type(), atom() | nil) :: [Ecto.Schema.t()]
+ def paginate(query, options, method \\ :keyset, table_binding \\ nil)
+
+ def paginate(list, options, _method, _table_binding) when is_list(list) do
+ offset = options[:offset] || 0
+ limit = options[:limit] || 0
+ Enum.slice(list, offset, limit)
+ end
+
+ def paginate(query, options, :keyset, table_binding) do
+ query
+ |> restrict(:min_id, options, table_binding)
+ |> restrict(:since_id, options, table_binding)
+ |> restrict(:max_id, options, table_binding)
+ |> restrict(:order, options, table_binding)
+ |> restrict(:limit, options, table_binding)
+ end
+
+ def paginate(query, options, :offset, table_binding) do
+ query
+ |> restrict(:order, options, table_binding)
+ |> restrict(:offset, options, table_binding)
+ |> restrict(:limit, options, table_binding)