ash_graphql/lib/resource/transformers/require_pkey_delimiter.ex
Zach Daniel c5662e90ba improvement: validate that relay? queries use keyset?: true actions
improvement: only add `count` to pages when one relevant query is countable
2022-10-21 07:38:33 -04:00

33 lines
874 B
Elixir

defmodule AshGraphql.Resource.Transformers.RequirePkeyDelimiter do
@moduledoc "Ensures that the resource has a primary key called `id`"
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
def transform(dsl) do
if Transformer.get_persisted(dsl, :embedded?) do
{:ok, dsl}
else
primary_key =
dsl
|> Transformer.get_entities([:attributes])
|> Enum.filter(& &1.primary_key?)
case primary_key do
[_single] ->
{:ok, dsl}
[_ | _] ->
if Transformer.get_persisted(dsl, :primary_key) do
{:ok, dsl}
else
{:error,
"AshGraphql requires a `primary_key_delimiter` to be set for composite primary keys."}
end
end
end
end
def after?(Ash.Resource.Transformers.BelongsToAttribute), do: true
def after?(_), do: false
end