@@ -79,7 +79,7 @@ object SchemaBuilder {
7979
8080 val handler = getHandler(config)
8181
82- var targetSchema = augmentSchema(sourceSchema, handler)
82+ var targetSchema = augmentSchema(sourceSchema, handler, config )
8383 targetSchema = addDataFetcher(targetSchema, dataFetchingInterceptor, handler)
8484 return targetSchema
8585 }
@@ -128,7 +128,7 @@ object SchemaBuilder {
128128 return handler
129129 }
130130
131- private fun augmentSchema (sourceSchema : GraphQLSchema , handler : List <AugmentationHandler >): GraphQLSchema {
131+ private fun augmentSchema (sourceSchema : GraphQLSchema , handler : List <AugmentationHandler >, schemaConfig : SchemaConfig ): GraphQLSchema {
132132 val types = sourceSchema.typeMap.toMutableMap()
133133 val env = BuildingEnv (types, sourceSchema)
134134 val queryTypeName = sourceSchema.queryTypeName()
@@ -157,11 +157,11 @@ object SchemaBuilder {
157157 builder.clearFields().clearInterfaces()
158158 // to prevent duplicated types in schema
159159 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 )) }
161161 }
162162 sourceType is GraphQLInterfaceType -> sourceType.transform { builder ->
163163 builder.clearFields()
164- sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env)) }
164+ sourceType.fieldDefinitions.forEach { f -> builder.field(enhanceRelations(f, env, schemaConfig )) }
165165 }
166166 else -> sourceType
167167 }
@@ -177,7 +177,7 @@ object SchemaBuilder {
177177 .build()
178178 }
179179
180- private fun enhanceRelations (fd : GraphQLFieldDefinition , env : BuildingEnv ): GraphQLFieldDefinition {
180+ private fun enhanceRelations (fd : GraphQLFieldDefinition , env : BuildingEnv , schemaConfig : SchemaConfig ): GraphQLFieldDefinition {
181181 return fd.transform { fieldBuilder ->
182182 // to prevent duplicated types in schema
183183 fieldBuilder.type(fd.type.ref() as GraphQLOutputType )
@@ -192,14 +192,21 @@ object SchemaBuilder {
192192 if (fd.getArgument(ProjectionBase .OFFSET ) == null ) {
193193 fieldBuilder.argument { a -> a.name(ProjectionBase .OFFSET ).type(Scalars .GraphQLInt ) }
194194 }
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+
201203 }
202204 }
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+ }
203210 }
204211 }
205212
0 commit comments