Current section
Files
Jump to
Current section
Files
lib/model/card.ex
defmodule Iyzico.Card do
@typedoc """
Represents a card to perform the checkout.
"""
@enforce_keys ~w(holder_name number exp_year exp_month)a
defstruct [
:holder_name,
:number,
:exp_year,
:exp_month,
:cvc,
:registration_alias,
]
@type card_type :: :credit | :debit | :prepaid
@type card_assoc :: :mastercard | :visa | :amex | :troy
@type card_family :: :bonus | :axess | :world | :maximum | :paraf | :cardfinans | :advantage
@type t :: %__MODULE__{
holder_name: binary,
number: binary,
exp_year: integer,
exp_month: integer,
cvc: integer,
registration_alias: binary
}
@doc """
Converts a card association string into existing atom.
## Examples
iex> Iyzico.Card.get_card_assoc "MASTER_CARD"
:mastercard
iex> Iyzico.Card.get_card_assoc "VISA"
:visa
iex> Iyzico.Card.get_card_assoc "AMERICAN_EXPRESS"
:amex
iex> Iyzico.Card.get_card_assoc "TROY"
:troy
"""
@spec get_card_assoc(String.t) :: card_assoc
def get_card_assoc(assoc) do
case assoc do
"MASTER_CARD" ->
:mastercard
"VISA" ->
:visa
"AMERICAN_EXPRESS" ->
:amex
"TROY" ->
:troy
end
end
@doc """
Converts a card type string into existing atom.
## Examples
iex> Iyzico.Card.get_card_type "CREDIT_CARD"
:credit
iex> Iyzico.Card.get_card_type "DEBIT_CARD"
:debit
iex> Iyzico.Card.get_card_type "PREPAID_CARD"
:prepaid
"""
@spec get_card_type(String.t) :: card_type
def get_card_type(type) do
case type do
"CREDIT_CARD" ->
:credit
"DEBIT_CARD" ->
:debit
"PREPAID_CARD" ->
:prepaid
end
end
@doc """
Converts given card family string to existing atom.
## Examples
iex> Iyzico.Card.get_card_family "Bonus"
:bonus
iex> Iyzico.Card.get_card_family "Axess"
:axess
iex> Iyzico.Card.get_card_family "World"
:world
iex> Iyzico.Card.get_card_family "Maximum"
:maximum
iex> Iyzico.Card.get_card_family "Paraf"
:paraf
iex> Iyzico.Card.get_card_family "CardFinans"
:cardfinans
iex> Iyzico.Card.get_card_family "Advantage"
:advantage
"""
@spec get_card_family(String.t) :: card_family
def get_card_family(family) do
case family do
"Bonus" ->
:bonus
"Axess" ->
:axess
"World" ->
:world
"Maximum" ->
:maximum
"Paraf" ->
:paraf
"CardFinans" ->
:cardfinans
"Advantage" ->
:advantage
end
end
end
defimpl Iyzico.IOListConvertible, for: Iyzico.Card do
def to_iolist(data) do
case data.registration_alias do
nil ->
[{"cardHolderName", data.holder_name},
{"cardNumber", data.number},
{"expireYear", data.exp_year},
{"expireMonth", data.exp_month},
{"cvc", data.cvc},
{"registerCard", 0}]
_any ->
[{"cardAlias", data.registration_alias},
{"cardNumber", data.number},
{"expireYear", data.exp_year},
{"expireMonth", data.exp_month},
{"cardHolderName", data.holder_name}]
end
end
end