def list_posts(criteria \\ %{}) do
{sort_by, sort_order} = sorters(criteria) || {:name, :asc}
from(p in Post)
|> order_by({^sort_order, ^sort_by})
|>Repo.paginate(
query,
[
before: Map.get(criteria, :before_cursor),
after: Map.get(criteria, :after_cursor),
cursor_fields: [{sort_by, sort_order}, :id],
limit: Map.get(criteria, :limit, 10)
])
end
defp sorters(%{sort: %{sort_by: sort_by, sort_order: sort_order}}) do
{sort_by, sort_order}
end
I call the function like this Posts.list_posts(%{sort: %{sort_by: :type, sort_order: :desc}, limit: 2})






















