lib/circlex/emulator/api/payments/payments_api.ex

defmodule Circlex.Emulator.Api.Payments.PaymentsApi do
  @moduledoc """
  Mounted under `/v1/payments`.
  """
  use Circlex.Emulator.Api
  alias Circlex.Emulator.State.PaymentState
  alias Circlex.Struct.Payment

  # https://developers.circle.com/reference/payments-payments-get
  @route "/"
  def list_payments(%{}) do
    {:ok, Enum.map(PaymentState.all_payments(), &Payment.serialize/1)}
  end

  # https://developers.circle.com/reference/payments-payments-get-id
  @route "/:payment_id"
  def get_payment(%{payment_id: payment_id}) do
    with {:ok, payment} <- PaymentState.get_payment(payment_id) do
      {:ok, Payment.serialize(payment)}
    end
  end
end