defmodule Ash.Resource.Transformers.ValidatePrimaryKey do @moduledoc "Validates and caches the primary key of a resource" use Spark.Dsl.Transformer alias Spark.Dsl.Transformer alias Spark.Error.DslError def after_compile?, do: true def transform(dsl_state) do primary_key = Transformer.get_persisted(dsl_state, :primary_key) case primary_key do [] -> {:ok, dsl_state} [_] -> {:ok, dsl_state} _ -> data_layer = Transformer.get_persisted(dsl_state, :data_layer) resource = Transformer.get_persisted(dsl_state, :module) if data_layer && data_layer.can?(resource, :composite_primary_key) do {:ok, dsl_state} else {:error, DslError.exception( module: resource, message: "Data layer does not support composite primary keys" )} end end end end