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