lib/malomo/return.ex

defmodule Malomo.Return do
  alias Malomo.Operation

  @doc """
  Create a Return.
  """
  @spec create(Keyword.t()) :: Operation.t()
  def create(opts) do
    %Operation{}
    |> Map.put(:method, :post)
    |> Map.put(:params, opts)
    |> Map.put(:path, "/returns")
  end

  @doc """
  Retrieve a Return.
  """
  @spec get(binary()) :: Operation.t()
  def get(id) do
    %Operation{}
    |> Map.put(:method, :get)
    |> Map.put(:path, "/returns/#{id}")
  end

  @doc """
  Retrieve a Return by a third-party alternate id.
  """
  @spec get_by_alternate_id(binary()) :: Operation.t()
  def get_by_alternate_id(alternate_id) do
    %Operation{}
    |> Map.put(:method, :get)
    |> Map.put(:params, [alternate_id: alternate_id])
    |> Map.put(:path, "/returns")
  end

  @doc """
  Update a Return.
  """
  @spec update(binary(), Keyword.t()) :: Operation.t()
  def update(id, opts) do
    %Operation{}
    |> Map.put(:method, :put)
    |> Map.put(:params, opts)
    |> Map.put(:path, "/returns/#{id}")
  end
end