Allow events to be searched by location and period

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-07-31 17:52:26 +02:00
parent 5a8745dc13
commit 3807ab1b63
15 changed files with 749 additions and 493 deletions

View File

@@ -51,25 +51,20 @@ defmodule Mobilizon.GraphQL.API.Search do
"""
@spec search_events(String.t(), integer | nil, integer | nil) ::
{:ok, Page.t()} | {:error, String.t()}
def search_events(search, page \\ 1, limit \\ 10) do
search = String.trim(search)
def search_events(%{term: term} = args, page \\ 1, limit \\ 10) do
term = String.trim(term)
cond do
search == "" ->
{:error, "Search can't be empty"}
if is_url(term) do
# skip, if it's w not an actor
case process_from_url(term) do
%Page{total: _total, elements: _elements} = page ->
{:ok, page}
is_url(search) ->
# skip, if it's w not an actor
case process_from_url(search) do
%Page{total: _total, elements: _elements} = page ->
{:ok, page}
_ ->
{:ok, %{total: 0, elements: []}}
end
true ->
{:ok, Events.build_events_for_search(search, page, limit)}
_ ->
{:ok, %{total: 0, elements: []}}
end
else
{:ok, Events.build_events_for_search(Map.put(args, :term, term), page, limit)}
end
end

View File

@@ -22,7 +22,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Search do
@doc """
Search events
"""
def search_events(_parent, %{search: search, page: page, limit: limit}, _resolution) do
Search.search_events(search, page, limit)
def search_events(_parent, %{page: page, limit: limit} = args, _resolution) do
Search.search_events(args, page, limit)
end
end

View File

@@ -45,7 +45,10 @@ defmodule Mobilizon.GraphQL.Schema.SearchType do
@desc "Search events"
field :search_events, :events do
arg(:search, non_null(:string))
arg(:term, :string, default_value: "")
arg(:tag, :string)
arg(:location, :string, description: "A geohash for coordinates")
arg(:radius, :float, default_value: 50)
arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10)