Skip to content

Commit 831cb94

Browse files
authored
Introduce config to define parent interfaces for Query/Mutation/Subscription apis #135 (#151)
* Introduce config to define parent interface for Query/Mutation/Subscription apis #135 * Gradle support for parent interfaces config #135 * Maven support for parent interfaces config #135 * Add README for parentInterfaces config #135 * Add navigation in README files
1 parent 4c28891 commit 831cb94

File tree

46 files changed

+686
-165
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+686
-165
lines changed

plugins/gradle/README.md

Lines changed: 67 additions & 34 deletions
Large diffs are not rendered by default.

plugins/gradle/example-server/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ graphqlCodegen {
3737
customTypesMapping = [
3838
DateTime: "java.util.Date"
3939
]
40+
parentInterfaces {
41+
queryResolver = "graphql.kickstart.tools.GraphQLQueryResolver"
42+
mutationResolver = "graphql.kickstart.tools.GraphQLMutationResolver"
43+
subscriptionResolver = "graphql.kickstart.tools.GraphQLSubscriptionResolver"
44+
resolver = "graphql.kickstart.tools.GraphQLResolver<{{TYPE}}>"
45+
}
4046
modelNameSuffix = "TO"
4147
generateApis = true
4248
}

plugins/gradle/example-server/src/main/java/io/github/kobylynskyi/product/graphql/resolvers/MutationsResolver.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package io.github.kobylynskyi.product.graphql.resolvers;
22

3-
import graphql.kickstart.tools.GraphQLMutationResolver;
43
import io.github.kobylynskyi.product.graphql.api.Mutation;
4+
import io.github.kobylynskyi.product.graphql.mappers.ProductMapper;
55
import io.github.kobylynskyi.product.graphql.model.ProductInputTO;
66
import io.github.kobylynskyi.product.graphql.model.ProductTO;
7-
import io.github.kobylynskyi.product.graphql.mappers.ProductMapper;
87
import io.github.kobylynskyi.product.model.Product;
98
import io.github.kobylynskyi.product.service.ProductService;
109
import org.springframework.beans.factory.annotation.Autowired;
1110
import org.springframework.stereotype.Component;
1211

1312
@Component
14-
public class MutationsResolver implements Mutation, GraphQLMutationResolver {
13+
public class MutationsResolver implements Mutation {
1514

1615
@Autowired
1716
private ProductService service;

plugins/gradle/example-server/src/main/java/io/github/kobylynskyi/product/graphql/resolvers/QueriesResolver.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.github.kobylynskyi.product.graphql.resolvers;
22

3-
import graphql.kickstart.tools.GraphQLQueryResolver;
43
import io.github.kobylynskyi.product.graphql.api.Query;
54
import io.github.kobylynskyi.product.graphql.mappers.ProductMapper;
65
import io.github.kobylynskyi.product.graphql.model.ProductTO;
@@ -13,7 +12,7 @@
1312
import static java.util.stream.Collectors.toList;
1413

1514
@Component
16-
public class QueriesResolver implements Query, GraphQLQueryResolver {
15+
public class QueriesResolver implements Query {
1716

1817
@Autowired
1918
private ProductService service;

plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
package io.github.kobylynskyi.graphql.codegen.gradle;
22

33
import com.kobylynskyi.graphql.codegen.GraphQLCodegen;
4-
import com.kobylynskyi.graphql.codegen.model.DefaultMappingConfigValues;
54
import com.kobylynskyi.graphql.codegen.model.GraphQLCodegenConfiguration;
65
import com.kobylynskyi.graphql.codegen.model.MappingConfig;
6+
import com.kobylynskyi.graphql.codegen.model.MappingConfigConstants;
77
import com.kobylynskyi.graphql.codegen.supplier.JsonMappingConfigSupplier;
88
import com.kobylynskyi.graphql.codegen.supplier.MappingConfigSupplier;
99
import com.kobylynskyi.graphql.codegen.supplier.SchemaFinder;
1010
import org.gradle.api.Action;
1111
import org.gradle.api.DefaultTask;
1212
import org.gradle.api.plugins.JavaPluginConvention;
13-
import org.gradle.api.tasks.Input;
14-
import org.gradle.api.tasks.InputFile;
15-
import org.gradle.api.tasks.InputFiles;
16-
import org.gradle.api.tasks.Nested;
1713
import org.gradle.api.tasks.Optional;
18-
import org.gradle.api.tasks.OutputDirectory;
19-
import org.gradle.api.tasks.SourceSet;
20-
import org.gradle.api.tasks.TaskAction;
14+
import org.gradle.api.tasks.*;
2115

2216
import java.io.File;
2317
import java.io.IOException;
@@ -43,20 +37,21 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode
4337
private String modelNamePrefix;
4438
private String modelNameSuffix;
4539
private String subscriptionReturnType;
46-
private Boolean generateBuilder = DefaultMappingConfigValues.DEFAULT_BUILDER;
47-
private Boolean generateApis = DefaultMappingConfigValues.DEFAULT_GENERATE_APIS;
40+
private Boolean generateBuilder = MappingConfigConstants.DEFAULT_BUILDER;
41+
private Boolean generateApis = MappingConfigConstants.DEFAULT_GENERATE_APIS;
4842
private String modelValidationAnnotation;
49-
private Boolean generateEqualsAndHashCode = DefaultMappingConfigValues.DEFAULT_EQUALS_AND_HASHCODE;
50-
private Boolean generateToString = DefaultMappingConfigValues.DEFAULT_TO_STRING;
51-
private Boolean generateAsyncApi = DefaultMappingConfigValues.DEFAULT_GENERATE_ASYNC_APIS;
52-
private Boolean generateParameterizedFieldsResolvers = DefaultMappingConfigValues.DEFAULT_GENERATE_PARAMETERIZED_FIELDS_RESOLVERS;
53-
private Boolean generateExtensionFieldsResolvers = DefaultMappingConfigValues.DEFAULT_GENERATE_EXTENSION_FIELDS_RESOLVERS;
54-
private Boolean generateDataFetchingEnvironmentArgumentInApis = DefaultMappingConfigValues.DEFAULT_GENERATE_DATA_FETCHING_ENV;
43+
private Boolean generateEqualsAndHashCode = MappingConfigConstants.DEFAULT_EQUALS_AND_HASHCODE;
44+
private Boolean generateToString = MappingConfigConstants.DEFAULT_TO_STRING;
45+
private Boolean generateAsyncApi = MappingConfigConstants.DEFAULT_GENERATE_ASYNC_APIS;
46+
private Boolean generateParameterizedFieldsResolvers = MappingConfigConstants.DEFAULT_GENERATE_PARAMETERIZED_FIELDS_RESOLVERS;
47+
private Boolean generateExtensionFieldsResolvers = MappingConfigConstants.DEFAULT_GENERATE_EXTENSION_FIELDS_RESOLVERS;
48+
private Boolean generateDataFetchingEnvironmentArgumentInApis = MappingConfigConstants.DEFAULT_GENERATE_DATA_FETCHING_ENV;
5549
private Set<String> fieldsWithResolvers = new HashSet<>();
5650
private Set<String> fieldsWithoutResolvers = new HashSet<>();
5751
private Boolean generateRequests;
5852
private String requestSuffix;
5953
private String responseProjectionSuffix;
54+
private final ParentInterfacesConfig parentInterfaces = new ParentInterfacesConfig();
6055
private String jsonConfigurationFile;
6156

6257
public GraphQLCodegenGradleTask() {
@@ -89,6 +84,10 @@ public void generate() throws Exception {
8984
mappingConfig.setGenerateRequests(generateRequests);
9085
mappingConfig.setRequestSuffix(requestSuffix);
9186
mappingConfig.setResponseProjectionSuffix(responseProjectionSuffix);
87+
mappingConfig.setResolverParentInterface(getResolverParentInterface());
88+
mappingConfig.setQueryResolverParentInterface(getQueryResolverParentInterface());
89+
mappingConfig.setMutationResolverParentInterface(getMutationResolverParentInterface());
90+
mappingConfig.setSubscriptionResolverParentInterface(getSubscriptionResolverParentInterface());
9291

9392
new GraphQLCodegen(getActualSchemaPaths(), outputDir, mappingConfig, buildJsonSupplier()).generate();
9493
}
@@ -120,15 +119,15 @@ private Path getSchemasRootDir() {
120119

121120
private java.util.Optional<Path> findDefaultResourcesDir() {
122121
return getProject().getConvention()
123-
.getPlugin(JavaPluginConvention.class)
124-
.getSourceSets()
125-
.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
126-
.getResources()
127-
.getSourceDirectories()
128-
.getFiles()
129-
.stream()
130-
.findFirst()
131-
.map(File::toPath);
122+
.getPlugin(JavaPluginConvention.class)
123+
.getSourceSets()
124+
.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
125+
.getResources()
126+
.getSourceDirectories()
127+
.getFiles()
128+
.stream()
129+
.findFirst()
130+
.map(File::toPath);
132131
}
133132

134133
private MappingConfigSupplier buildJsonSupplier() {
@@ -409,6 +408,40 @@ public void setResponseProjectionSuffix(String responseProjectionSuffix) {
409408
this.responseProjectionSuffix = responseProjectionSuffix;
410409
}
411410

411+
@Nested
412+
@Optional
413+
public ParentInterfacesConfig getParentInterfaces() {
414+
return parentInterfaces;
415+
}
416+
417+
public void parentInterfaces(Action<? super ParentInterfacesConfig> action) {
418+
action.execute(parentInterfaces);
419+
}
420+
421+
@Internal
422+
@Override
423+
public String getQueryResolverParentInterface() {
424+
return parentInterfaces.getQueryResolver();
425+
}
426+
427+
@Internal
428+
@Override
429+
public String getMutationResolverParentInterface() {
430+
return parentInterfaces.getMutationResolver();
431+
}
432+
433+
@Internal
434+
@Override
435+
public String getSubscriptionResolverParentInterface() {
436+
return parentInterfaces.getSubscriptionResolver();
437+
}
438+
439+
@Internal
440+
@Override
441+
public String getResolverParentInterface() {
442+
return parentInterfaces.getResolver();
443+
}
444+
412445
@InputFile
413446
@Optional
414447
public String getJsonConfigurationFile() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.github.kobylynskyi.graphql.codegen.gradle;
2+
3+
import org.gradle.api.tasks.Input;
4+
import org.gradle.api.tasks.Optional;
5+
6+
public class ParentInterfacesConfig {
7+
8+
private String queryResolver;
9+
private String mutationResolver;
10+
private String subscriptionResolver;
11+
private String resolver;
12+
13+
@Input
14+
@Optional
15+
public String getQueryResolver() {
16+
return queryResolver;
17+
}
18+
19+
@Input
20+
@Optional
21+
public String getMutationResolver() {
22+
return mutationResolver;
23+
}
24+
25+
@Input
26+
@Optional
27+
public String getSubscriptionResolver() {
28+
return subscriptionResolver;
29+
}
30+
31+
@Input
32+
@Optional
33+
public String getResolver() {
34+
return resolver;
35+
}
36+
37+
public void setQueryResolver(String queryResolver) {
38+
this.queryResolver = queryResolver;
39+
}
40+
41+
public void setMutationResolver(String mutationResolver) {
42+
this.mutationResolver = mutationResolver;
43+
}
44+
45+
public void setSubscriptionResolver(String subscriptionResolver) {
46+
this.subscriptionResolver = subscriptionResolver;
47+
}
48+
49+
public void setResolver(String resolver) {
50+
this.resolver = resolver;
51+
}
52+
53+
}

0 commit comments

Comments
 (0)