defmodule ArcadiaCloud.Catalog.PlanVersion do use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id @statuses ~w(draft active retired) schema "plan_versions" do field :version, :integer field :base_price_cents, :integer, default: 0 field :currency, :string, default: "AUD" field :status, :string, default: "draft" field :published_at, :utc_datetime belongs_to :plan, ArcadiaCloud.Catalog.Plan has_many :items, ArcadiaCloud.Catalog.PlanItem timestamps(type: :utc_datetime) end def changeset(version, attrs) do version |> cast(attrs, [:plan_id, :version, :base_price_cents, :currency, :status, :published_at]) |> validate_required([:plan_id, :version]) |> validate_inclusion(:status, @statuses) |> validate_length(:currency, is: 3) |> unique_constraint([:plan_id, :version]) end end