defmodule Plausible.Auth.EmailActivationCode do @moduledoc """ Schema for email activation codes. """ use Ecto.Schema import Ecto.Changeset alias Plausible.Auth.User @type t() :: %__MODULE__{} schema "email_activation_codes" do field :code, :string field :issued_at, :naive_datetime belongs_to :user, User end @spec new(User.t(), NaiveDateTime.t()) :: Ecto.Changeset.t() def new(user, now) do now = NaiveDateTime.truncate(now, :second) %__MODULE__{} |> change(code: generate_code(), issued_at: now) |> put_assoc(:user, user) end @spec generate_code() :: String.t() def generate_code do 1000..9999 |> Enum.random() |> Integer.to_string() end end