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 7bb5200f..84796eaf 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); 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 fe90ec62..76eda462 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 3f5cd1c0..34d6338f 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;