All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.introproventures.graphql.jpa.query.autoconfigure.GraphQLJpaQueryGraphQlExecutionAutoConfiguration Maven / Gradle / Ivy

package com.introproventures.graphql.jpa.query.autoconfigure;

import static com.introproventures.graphql.jpa.query.schema.impl.BatchLoaderRegistry.getMappedBatchDataLoaderMap;

import graphql.GraphQL;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.dataloader.DataLoaderOptions;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.graphql.GraphQlAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.graphql.ExecutionGraphQlService;
import org.springframework.graphql.execution.BatchLoaderRegistry;
import org.springframework.graphql.execution.GraphQlSource;
import reactor.core.publisher.Mono;

@AutoConfiguration(after = GraphQLJpaQueryGraphQlSourceAutoConfiguration.class)
@ConditionalOnClass({ GraphQL.class, GraphQlSource.class })
public class GraphQLJpaQueryGraphQlExecutionAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    BatchLoaderRegistry batchLoaderRegistry(ListableBeanFactory beanFactory) {
        var batchLoaderRegistry = new GraphQlAutoConfiguration(beanFactory).batchLoaderRegistry();

        DataLoaderOptions options = DataLoaderOptions.newOptions().setCachingEnabled(false);

        batchLoaderRegistry
            .forName(GraphQLJpaQueryGraphQlExecutionAutoConfiguration.class.getName())
            .withOptions(options)
            .registerMappedBatchLoader((keys, env) ->
                Mono.fromCompletionStage(CompletableFuture.completedStage(Map.of()))
            );

        return batchLoaderRegistry;
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnBean(GraphQlSource.class)
    ExecutionGraphQlService executionGraphQlService(
        ListableBeanFactory beanFactory,
        GraphQlSource graphQlSource,
        BatchLoaderRegistry batchLoaderRegistry
    ) {
        return new GraphQlAutoConfiguration(beanFactory).executionGraphQlService(graphQlSource, batchLoaderRegistry);
    }

    @Bean
    InitializingBean batchLoaderRegistryConfigurer(BatchLoaderRegistry batchLoaderRegistry) {
        return () -> {
            DataLoaderOptions options = DataLoaderOptions.newOptions().setCachingEnabled(false);

            getMappedBatchDataLoaderMap()
                .forEach((name, mappedBatchLoader) ->
                    batchLoaderRegistry
                        .forName(name)
                        .withOptions(options)
                        .registerMappedBatchLoader((keys, env) ->
                            Mono.fromCompletionStage(mappedBatchLoader.load(keys, env))
                        )
                );
        };
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy