analytics/lib/plausible/auth/email_activation_code.ex

36 lines
723 B
Elixir

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