2022-08-31 13:08:16 +12:00
|
|
|
defmodule AshGraphql.Resource.Info do
|
|
|
|
@moduledoc "Introspection helpers for AshGraphql.Resource"
|
|
|
|
|
|
|
|
alias Spark.Dsl.Extension
|
|
|
|
|
|
|
|
@doc "The queries exposed for the resource"
|
|
|
|
def queries(resource) do
|
|
|
|
Extension.get_entities(resource, [:graphql, :queries])
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc "The mutations exposed for the resource"
|
|
|
|
def mutations(resource) do
|
|
|
|
Extension.get_entities(resource, [:graphql, :mutations]) || []
|
|
|
|
end
|
|
|
|
|
2022-10-13 12:02:04 +13:00
|
|
|
@doc "Wether or not to encode the primary key as a single `id` field when reading and getting"
|
|
|
|
def encode_primary_key?(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :encode_primary_key?, true)
|
|
|
|
end
|
|
|
|
|
2022-08-31 13:08:16 +12:00
|
|
|
@doc "The managed_relationship configurations"
|
|
|
|
def managed_relationships(resource) do
|
|
|
|
Extension.get_entities(resource, [:graphql, :managed_relationships]) || []
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc "The graphql type of the resource"
|
|
|
|
def type(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :type, nil)
|
|
|
|
end
|
|
|
|
|
2022-09-23 05:31:40 +12:00
|
|
|
@doc "Graphql type overrides for the resource"
|
|
|
|
def attribute_types(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :attribute_types, [])
|
|
|
|
end
|
|
|
|
|
2022-10-21 10:51:10 +13:00
|
|
|
@doc "The field name to place the keyset of a result in"
|
|
|
|
def keyset_field(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :keyset_field, nil)
|
|
|
|
end
|
|
|
|
|
2022-09-26 17:12:10 +13:00
|
|
|
@doc "Graphql field name (attribute/relationship/calculation/arguments) overrides for the resource"
|
|
|
|
def field_names(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :field_names, [])
|
|
|
|
end
|
|
|
|
|
2022-10-12 08:37:19 +13:00
|
|
|
@doc "Which relationships should be included in the generated type"
|
|
|
|
def relationships(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :relationships, nil) ||
|
|
|
|
resource |> Ash.Resource.Info.public_relationships() |> Enum.map(& &1.name)
|
|
|
|
end
|
|
|
|
|
2022-09-26 17:12:10 +13:00
|
|
|
@doc "Graphql argument name overrides for the resource"
|
|
|
|
def argument_names(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :argument_names, [])
|
|
|
|
end
|
|
|
|
|
2022-09-23 05:31:40 +12:00
|
|
|
@doc "Graphql type overrides for the resource"
|
|
|
|
def attribute_input_types(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :attribute_input_types, [])
|
|
|
|
end
|
|
|
|
|
2022-08-31 13:08:16 +12:00
|
|
|
@doc "The delimiter for a resource with a composite primary key"
|
|
|
|
def primary_key_delimiter(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :primary_key_delimiter, nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc "Wether or not an object should be generated, or if one with the type name for this resource should be used."
|
|
|
|
def generate_object?(resource) do
|
|
|
|
Extension.get_opt(resource, [:graphql], :generate_object?, nil)
|
|
|
|
end
|
|
|
|
end
|