7

I am using hot chocolate graphql. I have a scenario where I have two separate query type classes.

  1. PostQuery -> contains post related queries
  2. UserQuery -> contains user related queries

My Folder Structure

enter image description here

Here it is how I am configuring it

 .AddAuthorization()
    //for inmemory subscription
    .AddInMemorySubscriptions()
    .AddQueryType<PostQuery>()
    .AddQueryType<UserQuery>()
    .AddMutationType<Mutation>()
    .AddSubscriptionType<Subscription>()
    .AddGlobalObjectIdentification()
    // Registers the filter convention of MongoDB
    .AddMongoDbFiltering()
    // Registers the sorting convention of MongoDB
    .AddMongoDbSorting()
    // Registers the projection convention of MongoDB
    .AddMongoDbProjections()
    // Registers the paging providers of MongoDB
    .AddMongoDbPagingProviders();

However, i am getting the following error

System.ArgumentException: The root type `Query` has already been registered

Is there anyway it can be configured or else I have to places everything in a single class?

shujaat siddiqui
  • 1,527
  • 1
  • 20
  • 41

2 Answers2

16

You need to register the querytype "Query" and add resolvers to handle multiple schemas of type "Query"

builder.Services
.AddQueryType(q => q.Name("Query"))
.AddType<PostQuery>()
.AddType<UserQuery>()

And in your query classes:

[ExtendObjectType("Query")]
public class PostQuery 
{
    public List<Post> GetAllPosts()
    {
        return List<Post>{...};
    }
}

[ExtendObjectType("Query")]
public class UserQuery
{
    public List<User> GetAllUsers()
    {
        return List<User>{...};
    }
}
Community
  • 1
  • 1
sjokkogutten
  • 2,005
  • 2
  • 21
  • 24
0

First thanks to @sjokkogutten for his answer. I strongly disagree with his approach. As your application size gets larger your types will become more tedious to manage.

The better approach would be to define your queries in partial classes.

postQuery.cs

public partial class Query
{
    public List<Post> GetAllPosts()
    {
        return List<Post>{...};
    }
}

UserQuery.cs

public partial class Query
{
    public List<User> GetAllUsers()
    {
        return List<User>{...};
    }
}
THE AMAZING
  • 1,496
  • 2
  • 16
  • 38