lib/instruments/bank_account.ex

defmodule Instruments.BankAccount do
  alias Customers.Customer
  alias Instruments.Bank

  @derive Jason.Encoder

  @type t() :: %__MODULE__{
          account_number: String.t(),
          bank: Bank.t(),
          bank_code: String.t(),
          customer: Customer.t(),
          fingerprint: String.t(),
          iban: String.t(),
          id: String.t(),
          swift_bic: String.t(),
          type: String.t()
        }

  defstruct [
    :account_number,
    :bank,
    :bank_code,
    :customer,
    :fingerprint,
    :iban,
    :id,
    :swift_bic,
    :type
  ]

  def build(params) when is_map(params) do
    %__MODULE__{
      account_number: params[:account_number],
      bank: Bank.build(params[:bank]),
      bank_code: params[:bank_code],
      customer: Customer.build(params[:customer]),
      fingerprint: params[:fingerprint],
      iban: params[:iban],
      id: params[:id],
      swift_bic: params[:swift_bic],
      type: params[:type]
    }
  end
end