defmodule Patreon.API.V2.Resource.Member do
@type t :: %__MODULE__{
id: String.t,
campaign_lifetime_support_cents: integer | nil,
currently_entitled_amount_cents: integer | nil,
email: String.t | nil,
full_name: String.t | nil,
is_follower: boolean | nil,
last_charge_date: DateTime.t | nil,
last_charge_status: String.t | nil,
lifetime_support_cents: integer | nil,
next_charge_date: DateTime.t | nil,
note: String.t | nil,
patreon_status: String.t | nil,
pledge_candence: integer | nil,
pledge_relationship_start: DateTime.t | nil,
will_pay_amount_cents: integer | nil,
}
defstruct [
:id,
:campaign_lifetime_support_cents,
:currently_entitled_amount_cents,
:email,
:full_name,
:is_follower,
:last_charge_date,
:last_charge_status,
:lifetime_support_cents,
:next_charge_date,
:note,
:patreon_status,
:pledge_candence,
:pledge_relationship_start,
:will_pay_amount_cents,
]
@spec from_response(map) :: %__MODULE__{}
def from_response(%{data: data} = decoded) when is_list(data) do
Enum.map(decoded.data, &from_response/1)
end
@spec from_response(map) :: %__MODULE__{}
def from_response(%{data: data}) do
from_response(data)
end
@spec from_response(map) :: %__MODULE__{}
def from_response(data) do
IO.inspect data
campaign =
%{id: data.id}
|> Map.merge(data.attributes)
Kernel.struct(__MODULE__, campaign)
end
def opts_to_query([]) do
[]
end
def opts_to_query(include_fields) do
Enum.reduce(include_fields, ["fields[member]": ""], &generate_query_option/2)
|> Keyword.filter(fn({_key, val}) -> val != "" end)
|> IO.inspect
end
defp generate_query_option({:member, []}, acc) do
acc
end
defp generate_query_option({:member, member_fields}, acc) do
Keyword.put(acc, :"fields[member]", Enum.join(member_fields, ","))
end
defp generate_query_option(_todo, acc) do
acc
end
end