lib/ibanity/api/xs2a/account_information_access_request_authorization.ex

defmodule Ibanity.Xs2a.AccountInformationAccessRequestAuthorization do
  @moduledoc """
  [Account information access requests](https://documentation.ibanity.com/xs2a/api#account-information-access-request-authorization) API wrapper
  """

  use Ibanity.Resource

  defstruct id: nil,
            status: nil

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

  @doc """
  [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-account-information-access-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-account-information-access-request-authorization)

      iex> "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
      ...> |> Request.customer_access_token
      ...> |> Request.id(:financial_institution_id, "b031dfe8-ebad-410b-aa77-064f8c876540")
      ...> |> Request.id(:account_information_access_request_id, "b031dfe8-ebad-410b-aa77-064f8c876540")
      ...> |> Request.attribute("query_parameters", %{code: "SFMyNTY.g3QAAAA..."})
      ...> |> AccountInformationAccessRequestAuthorization.create
      {:ok,
        %Ibanity.Xs2a.AccountInformationAccessRequestAuthorization{
          id: "3ffd82c0-944a-4cee-bf31-192e3137c76e",
          status: "succeeded"
        }
      }

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


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