defmodule Rivet.Ident.Email do
@moduledoc """
Schema for representing and working with a Ident.Email.
"""
use TypedEctoSchema
use Rivet.Ecto.Model
alias Rivet.Ident
typed_schema "user_emails" do
belongs_to(:user, Ident.User, type: :binary_id, foreign_key: :user_id)
field(:address, :string)
field(:primary, :boolean, default: false)
field(:verified, :boolean, default: false)
field(:bounce, {:array, :map})
timestamps()
end
@required_fields [:user_id, :address]
use Rivet.Ecto.Collection,
not_found: :atom,
required: @required_fields,
update: [:address, :primary, :verified, :bounce]
def validate(chgset) do
chgset
|> validate_required(@required_fields)
|> validate_format(:address, ~r/[a-z0-9+_-]@[a-z0-9-]+\.[a-z0-9-]/i,
message: "needs to be a valid email address"
)
|> unique_constraint(:address, message: "is already registered")
end
end