1
0
Fork 0
mirror of https://framagit.org/framasoft/mobilizon.git synced 2024-12-23 08:22:50 +00:00
mobilizon/lib/mobilizon_web/resolvers/address.ex
Thomas Citharel 2fe33aa470
ℹ Improve docs and documentation (again)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2019-03-19 11:16:03 +01:00

42 lines
1.3 KiB
Elixir

defmodule MobilizonWeb.Resolvers.Address do
@moduledoc """
Handles the comment-related GraphQL calls
"""
require Logger
alias Mobilizon.Addresses
alias Mobilizon.Addresses.Address
alias Mobilizon.Service.Geospatial
@doc """
Search an address
"""
@spec search(map(), map(), map()) :: {:ok, list(Address.t())}
def search(_parent, %{query: query}, %{context: %{ip: ip}}) do
country = Geolix.lookup(ip) |> Map.get(:country, nil)
local_addresses = Task.async(fn -> Addresses.search_addresses(query, country: country) end)
remote_addresses = Task.async(fn -> Geospatial.service().search(query) end)
addresses = Task.await(local_addresses) ++ Task.await(remote_addresses)
{:ok, addresses}
end
@doc """
Reverse geocode some coordinates
"""
@spec reverse_geocode(map(), map(), map()) :: {:ok, list(Address.t())}
def reverse_geocode(_parent, %{longitude: longitude, latitude: latitude}, %{context: %{ip: ip}}) do
country = Geolix.lookup(ip) |> Map.get(:country, nil)
local_addresses =
Task.async(fn -> Addresses.reverse_geocode(longitude, latitude, country: country) end)
remote_addresses = Task.async(fn -> Geospatial.service().geocode(longitude, latitude) end)
addresses = Task.await(local_addresses) ++ Task.await(remote_addresses)
{:ok, addresses}
end
end