637 B · text 5af55d9
defmodule GitGud.Accounts.RecoveryCode do
use Ecto.Schema
import Ecto.Changeset
alias GitGud.Accounts.User
schema "user_recovery_codes" do
field :code_hash, :string
field :used_at, :utc_datetime
belongs_to :user, User
timestamps(type: :utc_datetime, updated_at: false)
end
def create_changeset(struct, attrs) do
struct
|> cast(attrs, [:user_id, :code_hash])
|> validate_required([:user_id, :code_hash])
|> unique_constraint(:code_hash)
end
def mark_used(struct),
do: change(struct, used_at: DateTime.utc_now(:second))
def used?(%__MODULE__{used_at: t}), do: not is_nil(t)
end