Current section

Files

Jump to
ex_vertical_booking lib request.ex
Raw

lib/request.ex

defmodule ExVerticalBooking.Request do
alias ExVerticalBooking.Response.Parser
def send({document, %{success: true} = meta}, %{endpoint: endpoint}) do
{_, payload} = response = HTTPoison.post(endpoint, document, [], [])
parsed_response = Parser.handle_response(response)
meta =
meta
|> Map.put(:finished_at, DateTime.utc_now())
|> Map.put(:request, document)
with {:ok, parsed_response} <- parsed_response do
{:ok, parsed_response, meta |> Map.put(:response, payload.body)}
else
{:error, reason} ->
{:error, response, meta |> Map.put(:success, false) |> Map.put(:errors, [reason])}
end
end
def send({document, %{success: false} = meta}, _) do
{:error, document, meta |> Map.put(:success, false) |> Map.put(:errors, meta.errors)}
end
def send({:error, document, meta}, _) do
{:error, document, meta |> Map.put(:success, false) |> Map.put(:errors, meta.errors)}
end
def send({document, meta}, _) do
{:error, document, meta |> Map.put(:success, false) |> Map.put(:errors, [:invalid_endpoint])}
end
end