lib/pow/ecto/schema/fields.ex

defmodule Pow.Ecto.Schema.Fields do
  @moduledoc """
  Handles the Ecto schema fields for user.
  """
  alias Pow.{Config, Ecto.Schema}

  @attrs [
    {:password_hash, :string, [redact: true], []},
    {:current_password, :string, [virtual: true, redact: true], []},
    {:password, :string, [virtual: true, redact: true], []}
  ]

  @doc """
  List of attributes for the ecto schema.
  """
  @spec attrs(Config.t()) :: [tuple()]
  def attrs(config) do
    user_id_field = Schema.user_id_field(config)

    [{user_id_field, :string, [], null: false}] ++ @attrs
  end

  @doc """
  List of indexes for the ecto schema.
  """
  @spec indexes(Config.t()) :: [tuple()]
  def indexes(config) do
    user_id_field = Schema.user_id_field(config)

    [{user_id_field, true}]
  end
end