File size: 723 Bytes
3e21b19 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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
|