defmodule Plaid.Transactions.Transaction do
@moduledoc """
[Plaid Transaction schema.](https://plaid.com/docs/api/transactions)
"""
@behaviour Plaid.Castable
alias Plaid.Castable
alias Plaid.Transactions.Transaction.{Location, PaymentMeta}
@type t :: %__MODULE__{
account_id: String.t(),
amount: number(),
iso_currency_code: String.t() | nil,
unofficial_currency_code: String.t() | nil,
category: [String.t()] | nil,
category_id: String.t(),
date: String.t(),
authorized_date: String.t() | nil,
location: Location.t(),
name: String.t(),
merchant_name: String.t() | nil,
payment_meta: PaymentMeta.t(),
payment_channel: String.t(),
pending: boolean(),
pending_transaction_id: String.t() | nil,
account_owner: String.t() | nil,
transaction_id: String.t(),
transaction_code: String.t() | nil,
transaction_type: String.t(),
date_transacted: String.t() | nil,
original_description: String.t() | nil
}
defstruct [
:account_id,
:amount,
:iso_currency_code,
:unofficial_currency_code,
:category,
:category_id,
:date,
:authorized_date,
:location,
:name,
:merchant_name,
:payment_meta,
:payment_channel,
:pending,
:pending_transaction_id,
:account_owner,
:transaction_id,
:transaction_code,
:transaction_type,
:date_transacted,
:original_description
]
@impl true
def cast(generic_map) do
%__MODULE__{
account_id: generic_map["account_id"],
amount: generic_map["amount"],
iso_currency_code: generic_map["iso_currency_code"],
unofficial_currency_code: generic_map["unofficial_currency_code"],
category: generic_map["category"],
category_id: generic_map["category_id"],
date: generic_map["date"],
authorized_date: generic_map["authorized_date"],
location: Castable.cast(Location, generic_map["location"]),
name: generic_map["name"],
merchant_name: generic_map["merchant_name"],
payment_meta: Castable.cast(PaymentMeta, generic_map["payment_meta"]),
payment_channel: generic_map["payment_channel"],
pending: generic_map["pending"],
pending_transaction_id: generic_map["pending_transaction_id"],
account_owner: generic_map["account_owner"],
transaction_id: generic_map["transaction_id"],
transaction_code: generic_map["transaction_code"],
transaction_type: generic_map["transaction_type"],
date_transacted: generic_map["date_transacted"],
original_description: generic_map["original_description"]
}
end
end