lib/ibanity/api/xs2a/payment_initiation_request_authorization.ex

defmodule Ibanity.Xs2a.PaymentInitiationRequestAuthorization do
  @moduledoc """
  [Payment initiation requests](https://documentation.ibanity.com/xs2a/api#payment-initiation-request-authorization) API wrapper
  """

  use Ibanity.Resource

  defstruct id: nil,
            status: nil

  @api_schema_path ["xs2a", "customer", "financialInstitution", "paymentInitiationRequest", "authorizations"]

  @doc """
  [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-payment-initiation-request-authorization)

  In order for the request to be successful you must have created a `Ibanity.Xs2a.CustomerAccessToken` beforehand.

  ## Example

  This is the transcription of the example found in the [API documentation](https://documentation.ibanity.com/xs2a/api#create-payment-initiation-request-authorization)

      iex> "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
      ...> |> Request.customer_access_token
      ...> |> Request.id(:financial_institution_id, "b031dfe8-ebad-410b-aa77-064f8c876540")
      ...> |> Request.id(:payment_initiation_request_id, "b031dfe8-ebad-410b-aa77-064f8c876540")
      ...> |> Request.attribute("query_parameters", %{})
      ...> |> PaymentInitiationRequestAuthorization.create
      {:ok,
        %Ibanity.Xs2a.PaymentInitiationRequestAuthorization{
          id: "ce410d99-6382-4463-bfd6-fa606c379dea",
          status: nil
        }
      }

  """
  def create(%Request{} = request) do
    request
    |> Request.resource_type("payment_initiation_request_authorization")
    |> Request.id(:id, "")
    |> Client.execute(:post, @api_schema_path, "paymentInitiationRequestAuthorization")
  end


  @doc false
  def key_mapping do
    [
      id: {~w(id), :string},
      status: {~w(attributes status), :string}
    ]
  end
end