defmodule Gumroad.Subscriber do
@moduledoc """
A Gumroad subscriber.
See the [Gumroad docs](https://app.gumroad.com/api#subscribers) for more info.
"""
@type t :: %__MODULE__{
id: String.t(),
product_id: String.t(),
product_name: String.t(),
user_id: String.t(),
user_email: String.t(),
purchase_ids: list(String.t()),
created_at: String.t(),
user_requested_cancellation_at: nil,
charge_occurrence_count: nil,
recurrence: String.t(),
cancelled_at: nil,
ended_at: nil,
failed_at: nil,
free_trial_ends_at: nil,
license_key: String.t(),
status: String.t()
}
defstruct [
:id,
:product_id,
:product_name,
:user_id,
:user_email,
:purchase_ids,
:created_at,
:user_requested_cancellation_at,
:charge_occurrence_count,
:recurrence,
:cancelled_at,
:ended_at,
:failed_at,
:free_trial_ends_at,
:license_key,
:status
]
def new(body) do
%__MODULE__{
id: Map.fetch!(body, "id"),
product_id: Map.get(body, "product_id"),
product_name: Map.get(body, "product_name"),
user_id: Map.get(body, "user_id"),
user_email: Map.get(body, "user_email"),
purchase_ids: Map.get(body, "purchase_ids"),
created_at: Map.get(body, "created_at"),
user_requested_cancellation_at: Map.get(body, "user_requested_cancellation_at"),
charge_occurrence_count: Map.get(body, "charge_occurrence_count"),
recurrence: Map.get(body, "recurrence"),
cancelled_at: Map.get(body, "cancelled_at"),
ended_at: Map.get(body, "ended_at"),
failed_at: Map.get(body, "failed_at"),
free_trial_ends_at: Map.get(body, "free_trial_ends_at"),
license_key: Map.get(body, "license_key"),
status: Map.get(body, "status")
}
end
end