defmodule Ash.Resource.Transformers.BelongsToSourceField do
@moduledoc """
Sets the default `source_attribute` for belongs_to attributes
"""
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
# sobelow_skip ["DOS.BinToAtom"]
def transform(dsl_state) do
dsl_state
|> Transformer.get_entities([:relationships])
|> Enum.filter(&(&1.type == :belongs_to))
|> Enum.reject(& &1.source_attribute)
|> Enum.reduce({:ok, dsl_state}, fn relationship, {:ok, dsl_state} ->
new_dsl_state =
Transformer.replace_entity(
dsl_state,
[:relationships],
%{relationship | source_attribute: :"#{relationship.name}_id"},
&(&1.name == relationship.name)
)
{:ok, new_dsl_state}
end)
end
end