Packages
json_api_ecto_builder
0.1.1
Library for building an ecto query from some JSON API parameters.
Current section
Files
Jump to
Current section
Files
lib/appliers/sort.ex
defmodule JsonApiEctoBuilder.Applier.Sort do
import Ecto.Query
alias JsonApiEctoBuilder.ParamParser.Sort
def apply(query, %{ "sort" => _ } = param, base_alias, primary_key) do
order_by =
param
|> Sort.parse(base_alias)
|> Enum.reduce([], fn
{field, :asc, binding}, orders ->
orders ++ [asc: dynamic([{^binding, x}], field(x, ^field))]
{field, :desc, binding}, orders ->
orders ++ [desc: dynamic([{^binding, x}], field(x, ^field))]
end)
from x in query,
windows: [w: [order_by: ^order_by]],
select: %{id: field(x, ^primary_key), ordinal: row_number() |> over(:w)},
distinct: field(x, ^primary_key)
end
def apply(query, _, _, primary_key) do
from x in query,
select: %{id: field(x, ^primary_key), ordinal: row_number() |> over(order_by: x.id)},
distinct: field(x, ^primary_key)
end
end