My absinthe schema files are growing quite significantly. It is getting hard to keep track of schema definitions.
I’d like to structure my files with relation to entities I am dealing with.
Let’s say I have two following modules
defmodule UserSchema do
use Absinthe.Schema.Notation
object :user do
field :name, :string
end
end
defmodule PostSchema do
use Absinthe.Schema.Notation
object :post do
field :title, :string
field :contents, :string
end
end
I can import them into a global schema definition with import_types
directive. That’s cool. But my entities are related to each other, and often the relation is circular. If we have something like this:
defmodule UserSchema do
use Absinthe.Schema.Notation
import_types(PostSchema)
object :user do
field :name, :string
field :posts, list_of(:post)
end
end
defmodule PostSchema do
use Absinthe.Schema.Notation
import_types(UserSchema)
object :post do
field :title, :string
field :contents, :string
field :author, :user
end
end
This causes an infinite loop on compilation. And it does make sense.
The question is: Can I have circular dependancies on graphql type definitions? And if so, how would I accomplish this.
I know that circular resolution is f-ing hard. And I wouldn’t be surprised if such capabilities are not implemented. Honestly, it would be enough for me to even have C-like declarations that type exists, but is defined elsewhere