defmodule ArcadiaCloud.Billing.Subscription do use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id @statuses ~w(active paused cancelled) schema "subscriptions" do field :status, :string, default: "active" field :current_period_start, :date field :current_period_end, :date field :trial_ends_at, :date belongs_to :deployment, ArcadiaCloud.Deployments.CloudDeployment belongs_to :plan_version, ArcadiaCloud.Catalog.PlanVersion has_many :addons, ArcadiaCloud.Billing.SubscriptionAddon timestamps(type: :utc_datetime) end @required ~w(deployment_id plan_version_id current_period_start current_period_end)a @optional ~w(status trial_ends_at)a def changeset(sub, attrs) do sub |> cast(attrs, @required ++ @optional) |> validate_required(@required) |> validate_inclusion(:status, @statuses) |> unique_constraint(:deployment_id) end end