View Source Importing Types
It doesn't take long for a schema module to become crowded with types, resolvers, and other customizations.
A good first step in cleaning up your schema is extracting your types,
organizing them into other modules, and then using Absinthe.Schema.Notation.import_types/1
to make them available to your schema.
Example
Let's say you have a schema that looks something like this:
defmodule MyAppWeb.Schema do
use Absinthe.Schema
object :user do
field :name, :string
end
# Rest of the schema...
endYou could extract your :user type into a module, MyAppWeb.Schema.AccountTypes:
defmodule MyAppWeb.Schema.AccountTypes do
use Absinthe.Schema.Notation
object :user do
field :name, :string
end
endNote that, unlike your schema module, type modules should use
Absinthe.Schema.Notation, notAbsinthe.Schema.
Now, you need to make sure you use import_types to tell your schema
where to find additional types:
defmodule MyAppWeb.Schema do
use Absinthe.Schema
import_types MyAppWeb.Schema.AccountTypes
# Rest of the schema...
endImportant: You should only use
import_typesfrom your schema module; think of it like a manifest.
Now, your schema will be able to resolve any references to your :user type
during compilation.
What about root types?
Root types (which are defined using the query, mutation, and
subscription macros), can only be defined on the schema module---you
can't extract them, but you can use the import_fields mechanism to
extract their contents.
Here's an example:
query do
import_fields :account_queries
endThis will look for a matching object type :account_queries, and pull
its fields into the root query type.
For more information, see the guide.