Cqrs.Absinthe (cqrs_tools v0.3.7) 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

  enum :user_status do
    value :active
    value :suspended
  end

  object :user do
    field :id, :id
    field :name, :string
    field :email, :string
    field :status, :user_status
  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

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.
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.
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