defmodule ArcadiaCloud.Provisioning.CloudDrift do use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id @statuses ~w(open accepted reverted stale) schema "cloud_drift" do field :field, :string field :expected, :map field :actual, :map field :status, :string, default: "open" field :detected_at, :utc_datetime field :resolved_at, :utc_datetime field :resolved_by, :string belongs_to :resource, ArcadiaCloud.Cloud.CloudResource belongs_to :provisioned, ArcadiaCloud.Provisioning.CloudProvisioned timestamps(type: :utc_datetime) end @required ~w(resource_id provisioned_id field detected_at)a @optional ~w(expected actual status resolved_at resolved_by)a def changeset(drift, attrs) do drift |> cast(attrs, @required ++ @optional) |> validate_required(@required) |> validate_inclusion(:status, @statuses) end end