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 theAbsinthe.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
Functions
Defines a field backed by a Command resolver.
Defines an Absinthe Enum from a Command, Domain Event, or Ecto Schema.
Link to this section Functions
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.
Defines an Absinthe Enum from a Command, Domain Event, or Ecto Schema.
derive_input_object(object_name, object_source_module, 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
- Afunction/1
that accepts the result of the command execution. The function should return the standardAbsinthe
{:ok, response}
or{:error, error}
tuple.:input_object?
-true | false
. Defaults tofalse
- If
true
, one arg with the name of:input
will be generated. - If
true
, aninput_object
for the Command is expected to exist. Seederive_mutation_input/2
.
- If
: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.
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.
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.