Turbo.Ecto.Hooks.Search (turbo_ecto v1.0.2)
This module provides a operations that can add searching functionality to
a pipeline of Ecto
queries. This module works by taking fields.
Inspire from: ex_sieve
Link to this section Summary
Functions
Returns the search object.
Link to this section Types
Specs
Link to this section Functions
Link to this function
run(schema, params)
Specs
run(Ecto.Query.t(), map()) :: tuple()
Returns the search object.
Examples
iex> params = %{"q" => %{"name_or_category_name_like" => "elixir", "price_eq" => 1}, "s" => "updated_at+asc", "per_page" => 5, "page" => 1}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Schemas.Post, params)
{:ok,
%Turbo.Ecto.Hooks.Search{
combinator: :and,
conditions: [
%Turbo.Ecto.Hooks.Search.Condition{
attributes: [
%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :query},
%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :category}
],
combinator: :or,
search_type: :like,
values: ["elixir"]
},
%Turbo.Ecto.Hooks.Search.Condition{
attributes: [
%Turbo.Ecto.Hooks.Search.Attribute{name: :price, parent: :query}
],
combinator: :and,
search_type: :eq,
values: [1]
}
],
groupings: []
}
}
iex> params = %{"filter" => %{"name_like" => "elixir", "price_eq" => 1}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Schemas.Post, params)
{:ok,
%Turbo.Ecto.Hooks.Search{
combinator: :and,
groupings: [],
conditions: [%Turbo.Ecto.Hooks.Search.Condition{search_type: :like, values: ["elixir"], attributes: [%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :query}], combinator: :and}, %Turbo.Ecto.Hooks.Search.Condition{attributes: [%Turbo.Ecto.Hooks.Search.Attribute{name: :price, parent: :query}], combinator: :and, search_type: :eq, values: [1]}]}
}