View Source FatEcto.FatQuery.Whereable behaviour (FatEcto v1.0.0)
Builds queries after filtering fields based on user-provided filterable and overrideable fields.
This module provides functionality to filter Ecto queries using predefined filterable fields (handled by FatWhere
)
and overrideable fields (handled by a fallback function).
Options
filterable_fields
: A map of fields and their allowed operators. Example: %{
}"id" => ["$eq", "$neq"], "name" => ["$ilike"]
overrideable_fields
: A list of fields that can be overridden. Example: ["name", "phone"]ignoreable_fields_values
: A map of fields and their ignoreable values. Example: %{
}"name" => ["%%", "", [], nil], "phone" => ["%%", "", [], nil]
Example Usage
defmodule MyApp.HospitalFilter do
use FatEcto.FatQuery.Whereable,
filterable_fields: %{
"id" => ["$eq", "$neq"]
},
overrideable_fields: ["name", "phone"],
ignoreable_fields_values: %{
"name" => ["%%", "", [], nil],
"phone" => ["%%", "", [], nil]
}
import Ecto.Query
def override_whereable(query, "name", "$ilike", value) do
where(query, [r], ilike(fragment("(?)::TEXT", r.name), ^value))
end
def override_whereable(query, "phone", "$ilike", value) do
where(query, [r], ilike(fragment("(?)::TEXT", r.phone), ^value))
end
def override_whereable(query, _, _, _) do
query
end
end
Summary
Callbacks
Callback for handling custom filtering logic for overrideable fields.
Callbacks
@callback override_whereable( query :: Ecto.Query.t(), field :: String.t() | atom(), operator :: String.t(), value :: any() ) :: Ecto.Query.t()
Callback for handling custom filtering logic for overrideable fields.
This function acts as a fallback for overrideable fields. The default behavior is to return the query, but it can be overridden by the using module.