55 lines
1.7 KiB
Elixir
55 lines
1.7 KiB
Elixir
defmodule Mobilizon.GraphQL.Resolvers.Search do
|
|
@moduledoc """
|
|
Handles the event-related GraphQL calls
|
|
"""
|
|
alias Mobilizon.Actors.Actor
|
|
alias Mobilizon.Events.Event
|
|
alias Mobilizon.GraphQL.API.Search
|
|
alias Mobilizon.Storage.Page
|
|
|
|
@doc """
|
|
Search persons
|
|
"""
|
|
@spec search_persons(any(), map(), Absinthe.Resolution.t()) ::
|
|
{:ok, Page.t(Actor.t())} | {:error, String.t()}
|
|
def search_persons(_parent, %{page: page, limit: limit} = args, _resolution) do
|
|
Search.search_actors(Map.put(args, :minimum_visibility, :private), page, limit, :Person)
|
|
end
|
|
|
|
@doc """
|
|
Search groups
|
|
"""
|
|
@spec search_groups(any(), map(), Absinthe.Resolution.t()) ::
|
|
{:ok, Page.t(Actor.t())} | {:error, String.t()}
|
|
def search_groups(
|
|
_parent,
|
|
%{page: page, limit: limit} = args,
|
|
%{context: context} = _resolution
|
|
) do
|
|
current_actor = Map.get(context, :current_actor)
|
|
current_actor_id = if current_actor, do: current_actor.id, else: nil
|
|
args = Map.put(args, :current_actor_id, current_actor_id)
|
|
Search.search_actors(args, page, limit, :Group)
|
|
end
|
|
|
|
@doc """
|
|
Search events
|
|
"""
|
|
@spec search_events(any(), map(), Absinthe.Resolution.t()) ::
|
|
{:ok, Page.t(Event.t())} | {:error, String.t()}
|
|
def search_events(
|
|
_parent,
|
|
%{page: page, limit: limit} = args,
|
|
%{context: context} = _resolution
|
|
) do
|
|
current_user = Map.get(context, :current_user)
|
|
args = Map.put(args, :current_user, current_user)
|
|
Search.search_events(args, page, limit)
|
|
end
|
|
|
|
@spec interact(any(), map(), Absinthe.Resolution.t()) :: {:ok, struct} | {:error, :not_found}
|
|
def interact(_parent, %{uri: uri}, _resolution) do
|
|
Search.interact(uri)
|
|
end
|
|
end
|