defmodule ArcadiaCloud.Billing.CloudInvoice do use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id schema "cloud_invoices" do field :provider, :string field :provider_invoice_id, :string field :invoice_period, :date field :amount_cents, :integer field :status, :string, default: "open" field :issued_at, :utc_datetime field :csv_fetched_at, :utc_datetime field :lines_ingested_at, :utc_datetime field :pushed_to_finance_at, :utc_datetime field :finance_invoice_id, :string field :raw, :map timestamps(type: :utc_datetime) end @required ~w(provider provider_invoice_id invoice_period)a @optional ~w(amount_cents status issued_at csv_fetched_at lines_ingested_at pushed_to_finance_at finance_invoice_id raw)a def changeset(invoice, attrs) do invoice |> cast(attrs, @required ++ @optional) |> validate_required(@required) |> unique_constraint([:provider, :provider_invoice_id]) end end