@@ -79,7 +79,7 @@ object SchemaBuilder {
79
79
80
80
val handler = getHandler(config)
81
81
82
- var targetSchema = augmentSchema(sourceSchema, handler)
82
+ var targetSchema = augmentSchema(sourceSchema, handler, config )
83
83
targetSchema = addDataFetcher(targetSchema, dataFetchingInterceptor, handler)
84
84
return targetSchema
85
85
}
@@ -128,7 +128,7 @@ object SchemaBuilder {
128
128
return handler
129
129
}
130
130
131
- private fun augmentSchema (sourceSchema : GraphQLSchema , handler : List <AugmentationHandler >): GraphQLSchema {
131
+ private fun augmentSchema (sourceSchema : GraphQLSchema , handler : List <AugmentationHandler >, schemaConfig : SchemaConfig ): GraphQLSchema {
132
132
val types = sourceSchema.typeMap.toMutableMap()
133
133
val env = BuildingEnv (types, sourceSchema)
134
134
val queryTypeName = sourceSchema.queryTypeName()
@@ -157,11 +157,11 @@ object SchemaBuilder {
157
157
builder.clearFields().clearInterfaces()
158
158
// to prevent duplicated types in schema
159
159
sourceType.interfaces.forEach { builder.withInterface(GraphQLTypeReference (it.name)) }
160
- sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env)) }
160
+ sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env, schemaConfig )) }
161
161
}
162
162
sourceType is GraphQLInterfaceType -> sourceType.transform { builder ->
163
163
builder.clearFields()
164
- sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env)) }
164
+ sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env, schemaConfig )) }
165
165
}
166
166
else -> sourceType
167
167
}
@@ -177,7 +177,7 @@ object SchemaBuilder {
177
177
.build()
178
178
}
179
179
180
- private fun enhanceRelations (fd : GraphQLFieldDefinition , env : BuildingEnv ): GraphQLFieldDefinition {
180
+ private fun enhanceRelations (fd : GraphQLFieldDefinition , env : BuildingEnv , schemaConfig : SchemaConfig ): GraphQLFieldDefinition {
181
181
return fd.transform { fieldBuilder ->
182
182
// to prevent duplicated types in schema
183
183
fieldBuilder.type(fd.type.ref() as GraphQLOutputType )
@@ -192,14 +192,21 @@ object SchemaBuilder {
192
192
if (fd.getArgument(ProjectionBase .OFFSET ) == null ) {
193
193
fieldBuilder.argument { a -> a.name(ProjectionBase .OFFSET ).type(Scalars .GraphQLInt ) }
194
194
}
195
- if (fd.getArgument(ProjectionBase .ORDER_BY ) == null && fd.type.isList()) {
196
- (fd.type.inner() as ? GraphQLFieldsContainer )?.let { fieldType ->
197
- env.addOrdering(fieldType)?.let { orderingTypeName ->
198
- val orderType = GraphQLList (GraphQLNonNull (GraphQLTypeReference (orderingTypeName)))
199
- fieldBuilder.argument { a -> a.name(ProjectionBase .ORDER_BY ).type(orderType) }
200
- }
195
+
196
+ val fieldType = fd.type.inner() as ? GraphQLFieldsContainer ? : return @transform
197
+
198
+ if (fd.getArgument(ProjectionBase .ORDER_BY ) == null ) {
199
+ env.addOrdering(fieldType)?.let { orderingTypeName ->
200
+ val orderType = GraphQLList (GraphQLNonNull (GraphQLTypeReference (orderingTypeName)))
201
+ fieldBuilder.argument { a -> a.name(ProjectionBase .ORDER_BY ).type(orderType) }
202
+
201
203
}
202
204
}
205
+
206
+ if (schemaConfig.query.enabled && ! schemaConfig.query.exclude.contains(fieldType.name) && fd.getArgument(ProjectionBase .FILTER ) == null ) {
207
+ val filterTypeName = env.addFilterType(fieldType)
208
+ fieldBuilder.argument(input(ProjectionBase .FILTER , GraphQLTypeReference (filterTypeName)))
209
+ }
203
210
}
204
211
}
205
212
0 commit comments