File size: 1,581 Bytes
3e21b19 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | defmodule Plausible.Billing.Subscription do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
require Plausible.Billing.Subscription.Status
alias Plausible.Billing.Subscription
@type t() :: %__MODULE__{}
@required_fields [
:paddle_subscription_id,
:paddle_plan_id,
:update_url,
:cancel_url,
:status,
:next_bill_amount,
:next_bill_date,
:currency_code
]
@optional_fields [:last_bill_date]
schema "subscriptions" do
field :paddle_subscription_id, :string
field :paddle_plan_id, :string
field :update_url, :string
field :cancel_url, :string
field :status, Ecto.Enum, values: Subscription.Status.valid_statuses()
field :next_bill_amount, :string
field :next_bill_date, :date
field :last_bill_date, :date
field :currency_code, :string
belongs_to :team, Plausible.Teams.Team
timestamps()
end
def create_changeset(team, attrs \\ %{}) do
%__MODULE__{}
|> changeset(attrs)
|> put_assoc(:team, team)
end
def changeset(subscription, attrs \\ %{}) do
subscription
|> cast(attrs, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
|> unique_constraint(:paddle_subscription_id)
end
def free(team, attrs \\ %{}) do
%__MODULE__{
paddle_plan_id: "free_10k",
status: Subscription.Status.active(),
next_bill_amount: "0",
currency_code: "EUR"
}
|> cast(attrs, @required_fields ++ @optional_fields)
|> put_assoc(:team, team)
|> unique_constraint(:paddle_subscription_id)
end
end
|