@@ -126,7 +126,7 @@ defmodule Eventos.Addresses do
|
||||
if Enum.member?(@geom_types, type) do
|
||||
case type do
|
||||
:point ->
|
||||
{:ok, %Geo.Point{coordinates: {data["latitude"], data["longitude"]}, srid: 4326}}
|
||||
process_point(data["latitude"], data["longitude"])
|
||||
end
|
||||
else
|
||||
{:error, nil}
|
||||
@@ -137,4 +137,13 @@ defmodule Eventos.Addresses do
|
||||
def process_geom(nil) do
|
||||
{:error, nil}
|
||||
end
|
||||
|
||||
@spec process_point(number(), number()) :: tuple()
|
||||
defp process_point(latitude, longitude) when is_number(latitude) and is_number(longitude) do
|
||||
{:ok, %Geo.Point{coordinates: {latitude, longitude}, srid: 4326}}
|
||||
end
|
||||
|
||||
defp process_point(_, _) do
|
||||
{:error, "Latitude and longitude must be numbers"}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,18 +31,21 @@ defmodule EventosWeb.EventController do
|
||||
end
|
||||
|
||||
defp process_event_address(event) do
|
||||
if Map.has_key?(event, "address_type") && event["address_type"] === :physical do
|
||||
address = event["physical_address"]
|
||||
geom = EventosWeb.AddressController.process_geom(address["geom"])
|
||||
address = case geom do
|
||||
nil ->
|
||||
address
|
||||
_ ->
|
||||
%{address | "geom" => geom}
|
||||
end
|
||||
%{event | "physical_address" => address}
|
||||
else
|
||||
event
|
||||
cond do
|
||||
Map.has_key?(event, "address_type") && event["address_type"] !== :physical ->
|
||||
event
|
||||
Map.has_key?(event, "physical_address") ->
|
||||
address = event["physical_address"]
|
||||
geom = EventosWeb.AddressController.process_geom(address["geom"])
|
||||
address = case geom do
|
||||
nil ->
|
||||
address
|
||||
_ ->
|
||||
%{address | "geom" => geom}
|
||||
end
|
||||
%{event | "physical_address" => address}
|
||||
true ->
|
||||
event
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user