EctoTurbo.Hooks.Search
(EctoTurbo v1.0.0)
View Source
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
Summary
Functions
Returns the search object.
Types
Functions
@spec 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> EctoTurbo.Hooks.Search.run(EctoTurbo.Schemas.Post, params)
{:ok,
%EctoTurbo.Hooks.Search{
combinator: :and,
conditions: [
%EctoTurbo.Hooks.Search.Condition{
attributes: [
%EctoTurbo.Hooks.Search.Attribute{name: :name, parent: :query},
%EctoTurbo.Hooks.Search.Attribute{name: :name, parent: :category}
],
combinator: :or,
search_type: :like,
values: ["elixir"]
},
%EctoTurbo.Hooks.Search.Condition{
attributes: [
%EctoTurbo.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> EctoTurbo.Hooks.Search.run(EctoTurbo.Schemas.Post, params)
{:ok,
%EctoTurbo.Hooks.Search{
combinator: :and,
groupings: [],
conditions: [%EctoTurbo.Hooks.Search.Condition{search_type: :like, values: ["elixir"], attributes: [%EctoTurbo.Hooks.Search.Attribute{name: :name, parent: :query}], combinator: :and}, %EctoTurbo.Hooks.Search.Condition{attributes: [%EctoTurbo.Hooks.Search.Attribute{name: :price, parent: :query}], combinator: :and, search_type: :eq, values: [1]}]}
}