ash_cubdb/lib/ash_cub_db/transformers/cache_layout_transformer.ex
James Harton 74d878b70e
All checks were successful
continuous-integration/drone/push Build is passing
feat: create and read works.
2023-09-29 20:30:42 +13:00

40 lines
876 B
Elixir

defmodule AshCubDB.CacheLayoutTransformer do
@moduledoc false
alias Ash.Resource.Info
alias Spark.{Dsl, Dsl.Transformer, Error.DslError}
use Transformer
@doc false
@impl true
@spec after?(module) :: boolean
def after?(_), do: true
@doc false
@impl true
@spec transform(Dsl.t()) :: {:ok, Dsl.t()} | {:error, DslError.t()}
def transform(dsl_state) do
key =
dsl_state
|> Info.attributes()
|> Enum.filter(& &1.primary_key?)
|> Enum.map(& &1.name)
|> Enum.sort()
|> Enum.uniq()
|> List.to_tuple()
attributes =
dsl_state
|> Info.attributes()
|> Enum.reject(& &1.primary_key?)
|> Enum.map(& &1.name)
|> Enum.sort()
|> Enum.uniq()
|> List.to_tuple()
layout = {key, attributes}
{:ok, Transformer.persist(dsl_state, :cubdb_field_layout, layout)}
end
end