Current section
Files
Jump to
Current section
Files
lib/bingex/user/data/get_referrals_data.ex
defmodule Bingex.User.GetReferralsData do
@moduledoc """
Retrieves and structures a list of referral data for a user in BingX.
This module processes multiple referral entries from the API response,
ensuring proper decoding and embedding within replies.
"""
alias Bingex.API.Reply
alias Bingex.User.ReferralInfo
defstruct [:referrals]
@type t() :: %__MODULE__{
referrals: [ReferralInfo.t()]
}
@spec embed_in_reply(Reply.t()) :: Reply.t(t())
def embed_in_reply(%Reply{payload: payload} = reply) do
case decode(payload) do
{:ok, data} -> Reply.put_data(reply, data)
:error -> reply
end
end
@spec decode(any()) :: {:ok, t()} | :error
def decode(%{"data" => %{"list" => raw_referrals}})
when is_list(raw_referrals) do
referrals =
Enum.reduce(raw_referrals, [], fn raw_referral, referrals ->
case ReferralInfo.decode(raw_referral) do
{:ok, referral} -> [referral | referrals]
:error -> referrals
end
end)
{:ok, %__MODULE__{referrals: referrals}}
end
def decode(_data), do: :error
end