Current section

Files

Jump to
bingex lib bingex user model referral_info.ex
Raw

lib/bingex/user/model/referral_info.ex

defmodule Bingex.User.Model.ReferralInfo do
@moduledoc """
Represents referral information for a user in BingX.
"""
import Bingex.{Helpers, Convertors}
defstruct [
:balance,
:benefit_expiration,
:benefit_ratio,
:fee_ratio,
:benefit,
:deposit?,
:direct_referral?,
:invite_code,
:invite_result,
:inviter_uid,
:verified_kyc?,
:own_invite_code,
:registration_date,
:has_trades?,
:uid,
:user_level
]
@type t() :: %__MODULE__{
balance: nil | float(),
benefit: nil | :cashback | :discount,
benefit_expiration: nil | integer(),
benefit_ratio: nil | integer(),
fee_ratio: nil | integer(),
deposit?: nil | boolean(),
direct_referral?: nil | boolean(),
invite_code: nil | binary(),
invite_result: nil | boolean(),
inviter_uid: nil | binary(),
verified_kyc?: nil | boolean(),
own_invite_code: nil | binary(),
registration_date: nil | integer(),
has_trades?: nil | boolean(),
uid: nil | binary(),
user_level: nil | binary()
}
@spec decode(map()) :: {:ok, t()} | :error
def decode(%{} = data) do
{:ok,
%__MODULE__{
balance: get_and_transform(data, "balanceVolume", &to_float/1),
benefit: get_and_transform(data, "currentBenefit", &to_integer/1) |> interp_benefit(),
benefit_expiration: get_and_transform(data, "benefitExpiration", &to_integer/1),
benefit_ratio: get_and_transform(data, "benefitRatio", &to_integer/1),
fee_ratio: get_and_transform(data, "commissionRatio", &to_integer/1),
deposit?: get_and_transform(data, "deposit", &to_boolean/1),
direct_referral?: get_and_transform(data, "directInvitation", &to_boolean/1),
invite_code: get_and_transform(data, "inviteCode", &to_non_empty_binary/1),
invite_result: get_and_transform(data, "inviteResult", &to_boolean/1),
inviter_uid: get_and_transform(data, "inviterSid", &to_non_empty_binary/1),
verified_kyc?: get_and_transform(data, "kycResult", &to_boolean/1),
own_invite_code: get_and_transform(data, "ownInviteCode", &to_non_empty_binary/1),
registration_date: get_and_transform(data, "registerDateTime", &to_integer/1),
has_trades?: get_and_transform(data, "trade", &to_boolean/1),
uid: get_and_transform(data, "uid", &to_non_empty_binary/1),
user_level: get_and_transform(data, "userLevel", &to_non_empty_binary/1)
}}
end
def decode(_data), do: :error
defp interp_benefit(1), do: :cashback
defp interp_benefit(2), do: :discount
defp interp_benefit(_), do: nil
end