defmodule Ash.DataLayer.Transformers.RequirePreCheckWith do
@moduledoc """
Ensures that all identities have a `pre_check_with` configured, or raises.
"""
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
require Logger
@impl true
def after_compile?, do: true
@impl true
def transform(dsl) do
resource = Transformer.get_persisted(dsl, :module)
dsl
|> Transformer.get_entities([:identities])
|> Enum.filter(fn identity ->
is_nil(identity.pre_check_with)
end)
|> case do
[] ->
{:ok, dsl}
identities ->
if function_exported?(resource, :testing_identities, 0) do
{:ok, dsl}
else
{:error,
Spark.Error.DslError.exception(
message: """
The data layer does not support native checking of identities.
Identities: #{Enum.map_join(identities, ", ", & &1.name)}
Must specify the `pre_check_with` option.
"""
)}
end
end
end
end