defmodule Guildhall.OpsDb.Guild do use Ecto.Schema import Ecto.Changeset @type t :: %__MODULE__{} @min_guild_id 0x010 @max_guild_id 0x3FF schema "guilds" do field :guild_id, :integer field :name, :string field :slug, :string field :guild_type, :string field :description, :string field :trust_domain, :string field :contact_did, :string field :registrant_did, :string field :registration_ceremony_id, :string field :status, :string, default: "pending_approval" field :enrollment_accord_ref, :string field :metadata, :map, default: %{} has_many :guild_schematics, Guildhall.OpsDb.GuildSchematic has_many :guild_memberships, Guildhall.OpsDb.GuildMembership timestamps(type: :utc_datetime_usec) end def changeset(guild, attrs) do guild |> cast(attrs, [ :guild_id, :name, :slug, :guild_type, :description, :trust_domain, :contact_did, :registrant_did, :registration_ceremony_id, :status, :enrollment_accord_ref, :metadata ]) |> validate_required([:guild_id, :name, :slug, :guild_type, :contact_did, :registrant_did]) |> validate_inclusion(:guild_type, ~w(msp isv nsp)) |> validate_inclusion(:status, ~w(pending_approval approved denied active suspended)) |> validate_number(:guild_id, greater_than_or_equal_to: @min_guild_id, less_than_or_equal_to: @max_guild_id ) |> unique_constraint(:guild_id) |> unique_constraint(:slug) |> unique_constraint(:name) end end