mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 21:43:12 +12:00
24 lines
771 B
Elixir
24 lines
771 B
Elixir
|
defmodule AshPostgres.Transformers.ValidateReferences do
|
||
|
@moduledoc "Ensures that all `references` on a resource refer to a real relationship"
|
||
|
use Spark.Dsl.Transformer
|
||
|
alias Spark.Dsl.Transformer
|
||
|
|
||
|
def after_compile?, do: true
|
||
|
|
||
|
def transform(dsl) do
|
||
|
dsl
|
||
|
|> AshPostgres.DataLayer.Info.references()
|
||
|
|> Enum.each(fn reference ->
|
||
|
unless Ash.Resource.Info.relationship(dsl, reference.relationship) do
|
||
|
raise Spark.Error.DslError,
|
||
|
path: [:postgres, :references, reference.relationship],
|
||
|
module: Transformer.get_persisted(dsl, :module),
|
||
|
message:
|
||
|
"Found reference configuration for relationship `#{reference.relationship}`, but no such relationship exists"
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
{:ok, dsl}
|
||
|
end
|
||
|
end
|