mobilizon/lib/graphql/resolvers/address.ex

52 lines
1.2 KiB
Elixir
Raw Normal View History

2020-01-26 19:34:25 +00:00
defmodule Mobilizon.GraphQL.Resolvers.Address do
@moduledoc """
Handles the comment-related GraphQL calls
"""
2020-01-22 01:14:42 +00:00
alias Mobilizon.Addresses.Address
alias Mobilizon.Service.Geospatial
2020-01-22 01:14:42 +00:00
require Logger
@doc """
Search an address
"""
2020-01-26 19:34:25 +00:00
@spec search(map, map, map) :: {:ok, [Address.t()]}
def search(
_parent,
%{query: query, locale: locale, page: _page, limit: _limit} = args,
2020-01-26 19:34:25 +00:00
%{context: %{ip: ip}}
) do
geolix = Geolix.lookup(ip)
country_code =
case geolix do
%{country: %{iso_code: country_code}} -> String.downcase(country_code)
_ -> nil
end
addresses =
Geospatial.service().search(query,
lang: locale,
country_code: country_code,
type: Map.get(args, :type)
)
{:ok, addresses}
end
@doc """
Reverse geocode some coordinates
"""
2020-01-26 19:34:25 +00:00
@spec reverse_geocode(map, map, map) :: {:ok, [Address.t()]}
def reverse_geocode(
_parent,
%{longitude: longitude, latitude: latitude, zoom: zoom, locale: locale},
_context
) do
addresses = Geospatial.service().geocode(longitude, latitude, lang: locale, zoom: zoom)
{:ok, addresses}
end
end