Cqrs.Absinthe (cqrs_tools v0.5.28) View Source

Macros to derive queries and mutations from Queries and Commands, respectfully.

Configuration

  • :context_metadata_keys - A list of the keys in the Absinthe.Resolution context to pass to queries and mutations as metadata

  • :type_mappings - A list of mappings from ecto types to absinthe types.

    config :cqrs_tools, :absinthe, context_metadata_keys: [], type_mappings: [map: :json]

Example

defmodule ExampleApi.Types.UserTypes do
  @moduledoc false
  use Cqrs.Absinthe

  use Absinthe.Schema.Notation

  alias Example.Queries.{ListUsers, GetUser}
  alias Example.Users.Protocol.{CreateUser, SuspendUser, ReinstateUser}

  import ExampleApi.Resolvers.UserResolver

  derive_enum :user_status, {ListUsers, :status}

  object :user do
    field :id, :id
    field :name, :string
    field :email, :string
    field :status, :user_status

    derive_query GetUserFriends, list_of(:user),
      as: :friends,
      parent_mappings: [user_id: & &1.id]
  end

  object :user_queries do
    derive_query GetUser, :user,
      as: :user,
      except: [:name]

    derive_query ListUsers, list_of(:user),
      as: :users,
      arg_types: [status: :user_status]
  end

  derive_mutation_input CreateUser

  object :user_mutations do
    derive_mutation CreateUser, :user, input_object?: true, then: &fetch_user/1
    derive_mutation SuspendUser, :user, then: &fetch_user/1
    derive_mutation ReinstateUser, :user, then: &fetch_user/1
  end
end

Link to this section Summary

Link to this section Functions

Link to this macro

computed_field(command_module, return_type, opts \\ [])

View Source (macro)

Defines a field backed by a Command resolver.

Options

  • :as - The name to use for the mutation. Defaults to the query_module name snake_cased.
  • :before_resolve - Absinthe Middleware to run before the resolver.
  • :after_resolve - Absinthe Middleware to run after the resolver.
  • :arg_types - A list of filter names to absinthe types. See example.
  • :parent_mappings - A keyword list of command fields to functions that receive the field's parent object as an argument.
  • :field_transforms - A keyword list of command fields to functions that receive the field's current value as an argument.
Link to this macro

derive_enum(enum_name, arg)

View Source (macro)

Defines an Absinthe Enum from a Command, Domain Event, or Ecto Schema.

Link to this macro

derive_input_object(object_name, object_source_module, opts \\ [])

View Source (macro)
Link to this macro

derive_mutation(command_module, return_type, opts \\ [])

View Source (macro)

Defines an Absinthe mutation for a Command.

Options

  • :as - The name to use for the mutation. Defaults to the query_module name snake_cased.

  • :then - A function/1 that accepts the result of the command execution. The function should return the standard Absinthe {:ok, response} or {:error, error} tuple.

  • :input_object? - true | false. Defaults to false

    • If true, one arg with the name of :input will be generated.
    • If true, an input_object for the Command is expected to exist. See derive_mutation_input/2.
  • :arg_types - A list of filter names to absinthe types. See example.

  • :before_resolve - Absinthe Middleware to run before the resolver.

  • :after_resolve - Absinthe Middleware to run after the resolver.

  • :parent_mappings - A keyword list of command fields to functions that receive the field's parent object as an argument.

  • :field_transforms - A keyword list of command fields to functions that receive the field's current value as an argument.

  • :required - A list of command fields to make required; regardless of how they are defined in the command module.

Link to this macro

derive_mutation_input(command_module, opts \\ [])

View Source (macro)

Defines an Absinthe input_object for a Command.

Options

  • :as - The name to use for the query. Defaults to the command_module name snake_cased with _input appended.
  • :arg_types - A list of filter names to absinthe types. See example.
  • :required - A list of command fields to make required; regardless of how they are defined in the command module.
Link to this macro

derive_object(object_name, object_source_module, opts \\ [])

View Source (macro)
Link to this macro

derive_query(query_module, return_type, opts \\ [])

View Source (macro)

Defines an Absinthe query from a Query.

Options

  • :as - The name to use for the query. Defaults to the query_module name snake_cased.
  • :only - Use only the filters listed
  • :except - Create filters for all except those listed
  • :before_resolve - Absinthe Middleware to run before the resolver.
  • :after_resolve - Absinthe Middleware to run after the resolver.
  • :arg_types - A list of filter names to absinthe types. See example.
  • :parent_mappings - A keyword list of query filters to functions that receive the field's parent object as an argument.
  • :filter_transforms - A keyword list of query filters to functions that receive the filter's current value as an argument.
  • :required - A list of query filters to make required; regardless of how they are defined in the query module.