make query helpers default with flop format
Some checks failed
Build and Publish / build-release (push) Failing after 37s
Some checks failed
Build and Publish / build-release (push) Failing after 37s
This commit is contained in:
@@ -3,31 +3,26 @@ defmodule PolicyServiceWeb.QueryHelpers do
|
|||||||
|
|
||||||
alias OpenApiSpex.Schema
|
alias OpenApiSpex.Schema
|
||||||
|
|
||||||
|
@filter_count 3
|
||||||
|
|
||||||
def flop(filter_fields, order_fields, other \\ []) do
|
def flop(filter_fields, order_fields, other \\ []) do
|
||||||
|
filter_params = build_filter_params(filter_fields, @filter_count)
|
||||||
|
|
||||||
[
|
[
|
||||||
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: [in: :query, schema: %Schema{type: :number, default: 1}],
|
||||||
page_size: [in: :query, schema: %Schema{type: :number, default: 20}]
|
page_size: [in: :query, schema: %Schema{type: :number, default: 20}],
|
||||||
] ++ other
|
"order_by[]": [in: :query, schema: %Schema{type: :array, items: %Schema{type: :string, enum: order_fields}}],
|
||||||
|
"order_directions[]": [in: :query, schema: %Schema{type: :array, items: %Schema{type: :string, enum: ["asc", "desc"]}}]
|
||||||
|
] ++ filter_params ++ other
|
||||||
end
|
end
|
||||||
|
|
||||||
defp filters(fields) do
|
defp build_filter_params(fields, count) do
|
||||||
%Schema{
|
for i <- 0..(count - 1) do
|
||||||
type: :array,
|
[
|
||||||
items: %Schema{
|
{"filters[#{i}][field]", [in: :query, schema: %Schema{type: :string, enum: fields}]},
|
||||||
type: :object,
|
{"filters[#{i}][op]", [in: :query, schema: %Schema{type: :string, enum: Flop.Filter.allowed_operators(:all)}]},
|
||||||
properties: %{
|
{"filters[#{i}][value]", [in: :query, schema: %Schema{type: :string}]}
|
||||||
field: %Schema{type: :string, enum: fields},
|
]
|
||||||
value: %Schema{type: :any},
|
end |> List.flatten()
|
||||||
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
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user