defmodule WorkloadServiceWeb.QueryHelpers do @moduledoc false alias OpenApiSpex.Schema @filter_count 3 def flop(filter_fields, order_fields, other \\ []) do [ page: [in: :query, schema: %Schema{type: :number, default: 1}], page_size: [in: :query, schema: %Schema{type: :number, default: 20}], 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"]}} ] ] ++ build_filter_params(filter_fields) ++ other end defp build_filter_params(fields) do for i <- 0..(@filter_count - 1) do [ {:"filters_#{i}_field", [in: :query, schema: %Schema{type: :string, enum: fields}]}, {:"filters_#{i}_op", [in: :query, schema: %Schema{type: :string, enum: Flop.Filter.allowed_operators(:all)}]}, {:"filters_#{i}_value", [in: :query, schema: %Schema{type: :string}]} ] end |> List.flatten() end end