All checks were successful
Build and Publish / build-release (push) Successful in 1m25s
33 lines
917 B
Elixir
33 lines
917 B
Elixir
defmodule PolicyServiceWeb.QueryHelpers do
|
|
@moduledoc false
|
|
|
|
alias OpenApiSpex.Schema
|
|
|
|
def flop(filter_fields, order_fields, other \\ []) do
|
|
[
|
|
filters: [in: :query, schema: filters(filter_fields)],
|
|
order_by: [in: :query, schema: order_by(order_fields)],
|
|
page: [in: :query, schema: %Schema{type: :number, default: 1}],
|
|
page_size: [in: :query, schema: %Schema{type: :number, default: 20}]
|
|
] ++ other
|
|
end
|
|
|
|
defp filters(fields) do
|
|
%Schema{
|
|
type: :array,
|
|
items: %Schema{
|
|
type: :object,
|
|
properties: %{
|
|
field: %Schema{type: :string, enum: fields},
|
|
value: %Schema{type: :any},
|
|
op: %Schema{type: :string, enum: Flop.Filter.allowed_operators(:all)}
|
|
},
|
|
required: [:field, :value]
|
|
}
|
|
}
|
|
end
|
|
|
|
defp order_by(fields) do
|
|
%Schema{type: :array, items: %Schema{type: :string, enum: fields}}
|
|
end
|
|
end |