From 35dc32a948107c89a1d15ff2ce65b30cbced43f7 Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Thu, 24 Apr 2025 16:04:11 -0700 Subject: [PATCH 1/2] Add additional type entity filter to schema builder api --- .../jpa/query/schema/GraphQLSchemaBuilder.java | 8 ++++++++ .../schema/impl/GraphQLJpaSchemaBuilder.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/GraphQLSchemaBuilder.java b/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/GraphQLSchemaBuilder.java index fe90ec627..76eda4626 100644 --- a/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/GraphQLSchemaBuilder.java +++ b/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/GraphQLSchemaBuilder.java @@ -50,6 +50,14 @@ public interface GraphQLSchemaBuilder { */ GraphQLSchemaBuilder entityPath(String path); + /** + * Add package path to scan for additional entities to be included in GraphQL Schema. + * + * @param type GraphQL entitys package path + * @return this builder instance + */ + GraphQLSchemaBuilder additionalType(String type); + /** * Add package path to scan for entities to be included in GraphQL Schema. * diff --git a/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java b/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java index 3f5cd1c0d..34d6338f7 100644 --- a/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java +++ b/schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java @@ -162,6 +162,7 @@ public class GraphQLJpaSchemaBuilder implements GraphQLSchemaBuilder { private final Relay relay = new Relay(); private final List entityPaths = new ArrayList<>(); + private final List additionalTypes = new ArrayList<>(); private final Supplier batchLoadersRegistry = BatchLoaderRegistry::getInstance; private final Function> entityObjectTypeResolver = entityTypeMap::get; @@ -190,6 +191,7 @@ public GraphQLSchema build() { .getEntities() .stream() .filter(Predicate.not(entityCache::containsKey)) + .filter(this::isAdditionalType) .forEach(entity -> schema.additionalType(getEntityObjectType(entity))); if (enableSubscription) { @@ -1715,6 +1717,12 @@ protected boolean isNotIgnoredOrder(Attribute attribute) { return false; } + private boolean isAdditionalType(EntityType entityType) { + return additionalTypes + .stream() + .anyMatch(additionalType -> entityType.getJavaType().getName().startsWith(additionalType)); + } + @SuppressWarnings("unchecked") private GraphQLOutputType getGraphQLTypeFromJavaType(Class clazz) { if (clazz.isEnum()) { @@ -1887,6 +1895,15 @@ public GraphQLJpaSchemaBuilder entityPath(String path) { return this; } + @Override + public GraphQLJpaSchemaBuilder additionalType(String type) { + Assert.assertNotNull(type, () -> "type can't be null"); + + additionalTypes.add(type); + + return this; + } + public GraphQLJpaSchemaBuilder queryByIdFieldNameCustomizer(Function queryByIdFieldNameCustomizer) { this.queryByIdFieldNameCustomizer = queryByIdFieldNameCustomizer; From d8b07ad5499176b2aaa335ed3dd6f6a6d37a66c3 Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Thu, 24 Apr 2025 18:13:04 -0700 Subject: [PATCH 2/2] Apply additional type from schema import selector --- .../autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoconfigure/src/main/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java b/autoconfigure/src/main/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java index 7bb5200f3..84796eafd 100644 --- a/autoconfigure/src/main/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java +++ b/autoconfigure/src/main/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java @@ -126,7 +126,7 @@ GraphQLJpaSchemaBuilder defaultGraphQLJpaSchemaBuilder( .toManyDefaultOptional(properties.isToManyDefaultOptional()) .enableRelay(properties.isEnableRelay()); - EnableGraphQLJpaQuerySchemaImportSelector.getPackageNames().stream().forEach(builder::entityPath); + EnableGraphQLJpaQuerySchemaImportSelector.getPackageNames().stream().forEach(builder::additionalType); restrictedKeysProvider.ifAvailable(builder::restrictedKeysProvider);