2022-10-22 00:38:33 +13:00
|
|
|
defmodule AshGraphql.Resource.Transformers.RequirePkeyDelimiter do
|
2020-08-14 09:39:59 +12:00
|
|
|
@moduledoc "Ensures that the resource has a primary key called `id`"
|
2022-08-31 13:08:16 +12:00
|
|
|
use Spark.Dsl.Transformer
|
2020-08-14 09:39:59 +12:00
|
|
|
|
2022-08-31 13:08:16 +12:00
|
|
|
alias Spark.Dsl.Transformer
|
2020-08-14 09:39:59 +12:00
|
|
|
|
2022-08-31 13:08:16 +12:00
|
|
|
def transform(dsl) do
|
|
|
|
if Transformer.get_persisted(dsl, :embedded?) do
|
2021-01-13 09:14:35 +13:00
|
|
|
{:ok, dsl}
|
|
|
|
else
|
|
|
|
primary_key =
|
|
|
|
dsl
|
|
|
|
|> Transformer.get_entities([:attributes])
|
|
|
|
|> Enum.filter(& &1.primary_key?)
|
2020-08-14 09:39:59 +12:00
|
|
|
|
2021-01-13 09:14:35 +13:00
|
|
|
case primary_key do
|
|
|
|
[_single] ->
|
|
|
|
{:ok, dsl}
|
2020-08-14 09:39:59 +12:00
|
|
|
|
2021-01-13 09:14:35 +13:00
|
|
|
[_ | _] ->
|
2022-08-31 13:08:16 +12:00
|
|
|
if Transformer.get_persisted(dsl, :primary_key) do
|
2021-01-13 09:14:35 +13:00
|
|
|
{:ok, dsl}
|
|
|
|
else
|
|
|
|
{:error,
|
|
|
|
"AshGraphql requires a `primary_key_delimiter` to be set for composite primary keys."}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2020-08-14 09:39:59 +12:00
|
|
|
end
|
2021-05-02 08:28:14 +12:00
|
|
|
|
|
|
|
def after?(Ash.Resource.Transformers.BelongsToAttribute), do: true
|
2021-05-02 08:30:55 +12:00
|
|
|
def after?(_), do: false
|
2020-08-14 09:39:59 +12:00
|
|
|
end
|