Malien
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
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #security










Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
maartenvanvliet
import_typesis only needed in your schema module. It should not be used in any of the type modules (i.e. those that haveuse Absinthe.Schema.Notation). See also Importing Types — absinthe v1.11.0.References in PostSchema to :user and in UserSchema to :post are resolved in compilation to ensure the types exist.
Malien
Thanks, that is indeed the case. For some reason I was mislead that in order for references to be resolved, they had to be imported first. I think it was one of those
X is not defined in your schemathat threw me off, which now seems to be unrelated.maartenvanvliet
Created a PR to no longer allow
import_typesand similar in the type modules to avoid this confusion.