0
votes

I am using https://github.com/graphql-java-kickstart/graphql-spring-boot on a Spring Boot project. I need to filtering on subfield. For example:

query{
  userByEmail(email:"[email protected]"){
    firstName
    lastName
    roles(take: 2){
      name
    }
  }
}

Here is my codes:

schema

type User{
    id: ID!
    firstName: String
    lastName: String
    email: String
    roles: [Role!]
    birthDate: Date
}

 type Query {
    userByEmail(email:String): User
}

query resolver

@Component
@RequiredArgsConstructor
public class UserQueryResolver implements GraphQLQueryResolver {
    private final IUserRepository userRepository;

    public User userByEmail(String email) {
        return userRepository.findByEmail(email).orElse(null);
    }
}

resolver

@Component
@RequiredArgsConstructor
@Slf4j
public class UserResolver implements GraphQLResolver<User> {

    public CompletableFuture<List<Role>> roles(User user, DataFetchingEnvironment dfe) {
        final DataLoader<Long, List<Role>> dataloader = dfe.getDataLoaderRegistry().getDataLoader("userRoleDataLoader");

        return dataloader.load(user.getId(), user);
    }
}

Everything works well on my application but I could not integrate filtering on subfields. When I am setting the User type on schema like:

type User{
    id: ID!
    firstName: String
    lastName: String
    email: String
    roles(take: Int): [Role!]
    birthDate: Date
}

DataFetchingEnvironment dfe will be null. How to I do filtering on subfield?