Skip to content

Commit 71900a6

Browse files
authored
[spring-server] simplify schema configuration auto configuration (#433)
`SchemaGeneratorConfig`/`FederatedSchemaGeneratorConfig` auto config beans now accept optional parameters to set custom hooks, data fetcher factory provider and top level names.
1 parent ab2acff commit 71900a6

File tree

7 files changed

+38
-11
lines changed

7 files changed

+38
-11
lines changed

graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/SchemaGeneratorConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import com.expediagroup.graphql.hooks.SchemaGeneratorHooks
2626
open class SchemaGeneratorConfig(
2727
open val supportedPackages: List<String>,
2828
open val topLevelNames: TopLevelNames = TopLevelNames(),
29-
open val hooks: SchemaGeneratorHooks = NoopSchemaGeneratorHooks(),
29+
open val hooks: SchemaGeneratorHooks = NoopSchemaGeneratorHooks,
3030
open val dataFetcherFactoryProvider: KotlinDataFetcherFactoryProvider = KotlinDataFetcherFactoryProvider(hooks)
3131
)
3232

graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/hooks/NoopSchemaGeneratorHooks.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.expediagroup.graphql.hooks
1818

1919
/**
20-
* Default hooks that do not override or set anything. Only used internally.
21-
* If you don't need hooks, the configuration will default to these.
20+
* Default hooks that do not override or set anything. If you don't need hooks, the configuration will default to these.
2221
*/
23-
internal class NoopSchemaGeneratorHooks : SchemaGeneratorHooks
22+
object NoopSchemaGeneratorHooks : SchemaGeneratorHooks

graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/execution/CustomDataFetcherTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ data class Animal(
6666

6767
data class AnimalDetails(val specialId: Int)
6868

69-
class CustomDataFetcherFactoryProvider : KotlinDataFetcherFactoryProvider(NoopSchemaGeneratorHooks()) {
69+
class CustomDataFetcherFactoryProvider : KotlinDataFetcherFactoryProvider(NoopSchemaGeneratorHooks) {
7070

7171
override fun propertyDataFetcherFactory(kClass: KClass<*>, kProperty: KProperty<*>): DataFetcherFactory<Any> =
7272
if (kProperty.isLateinit) {

graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/extensions/KClassExtensionsTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ open class KClassExtensionsTest {
152152
kClass.simpleName?.contains("InvalidFunctionUnionInterface")?.not().isTrue()
153153
}
154154

155-
private val noopHooks = NoopSchemaGeneratorHooks()
155+
private val noopHooks = NoopSchemaGeneratorHooks
156156

157157
@Test
158158
fun `test getting valid properties with no hooks`() {

graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/hooks/SchemaGeneratorHooksTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ class SchemaGeneratorHooksTest {
206206

207207
@Test
208208
fun `willResolveMonad returns basic type`() {
209-
val hooks = NoopSchemaGeneratorHooks()
209+
val hooks = NoopSchemaGeneratorHooks
210210
val type = TestQuery::query.returnType
211211

212212
assertEquals(expected = "SomeData", actual = hooks.willResolveMonad(type).getSimpleName())

graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/FederationAutoConfiguration.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.expediagroup.graphql.spring
1818

19+
import com.expediagroup.graphql.TopLevelNames
20+
import com.expediagroup.graphql.execution.KotlinDataFetcherFactoryProvider
1921
import com.expediagroup.graphql.extensions.print
2022
import com.expediagroup.graphql.federation.FederatedSchemaGeneratorConfig
2123
import com.expediagroup.graphql.federation.FederatedSchemaGeneratorHooks
@@ -47,9 +49,20 @@ class FederationAutoConfiguration {
4749

4850
@Bean
4951
@ConditionalOnMissingBean
50-
fun federatedSchemaConfig(config: GraphQLConfigurationProperties, registry: FederatedTypeRegistry): FederatedSchemaGeneratorConfig = FederatedSchemaGeneratorConfig(
52+
fun federatedSchemaGeneratorHooks(registry: FederatedTypeRegistry): FederatedSchemaGeneratorHooks = FederatedSchemaGeneratorHooks(registry)
53+
54+
@Bean
55+
@ConditionalOnMissingBean
56+
fun federatedSchemaConfig(
57+
config: GraphQLConfigurationProperties,
58+
hooks: FederatedSchemaGeneratorHooks,
59+
topLevelNames: Optional<TopLevelNames>,
60+
dataFetcherFactoryProvider: Optional<KotlinDataFetcherFactoryProvider>
61+
): FederatedSchemaGeneratorConfig = FederatedSchemaGeneratorConfig(
5162
supportedPackages = config.packages,
52-
hooks = FederatedSchemaGeneratorHooks(registry)
63+
topLevelNames = topLevelNames.orElse(TopLevelNames()),
64+
hooks = hooks,
65+
dataFetcherFactoryProvider = dataFetcherFactoryProvider.orElse(KotlinDataFetcherFactoryProvider(hooks))
5366
)
5467

5568
@Bean

graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/SchemaAutoConfiguration.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@
1717
package com.expediagroup.graphql.spring
1818

1919
import com.expediagroup.graphql.SchemaGeneratorConfig
20+
import com.expediagroup.graphql.TopLevelNames
2021
import com.expediagroup.graphql.TopLevelObject
22+
import com.expediagroup.graphql.execution.KotlinDataFetcherFactoryProvider
2123
import com.expediagroup.graphql.extensions.print
24+
import com.expediagroup.graphql.hooks.NoopSchemaGeneratorHooks
25+
import com.expediagroup.graphql.hooks.SchemaGeneratorHooks
2226
import com.expediagroup.graphql.spring.operations.Mutation
2327
import com.expediagroup.graphql.spring.operations.Query
2428
import com.expediagroup.graphql.spring.operations.Subscription
@@ -44,9 +48,20 @@ class SchemaAutoConfiguration {
4448

4549
@Bean
4650
@ConditionalOnMissingBean
47-
fun schemaConfig(config: GraphQLConfigurationProperties): SchemaGeneratorConfig = SchemaGeneratorConfig(
48-
supportedPackages = config.packages
51+
fun schemaConfig(
52+
config: GraphQLConfigurationProperties,
53+
topLevelNames: Optional<TopLevelNames>,
54+
hooks: Optional<SchemaGeneratorHooks>,
55+
dataFetcherFactoryProvider: Optional<KotlinDataFetcherFactoryProvider>
56+
): SchemaGeneratorConfig {
57+
val generatorHooks = hooks.orElse(NoopSchemaGeneratorHooks)
58+
return SchemaGeneratorConfig(
59+
supportedPackages = config.packages,
60+
topLevelNames = topLevelNames.orElse(TopLevelNames()),
61+
hooks = generatorHooks,
62+
dataFetcherFactoryProvider = dataFetcherFactoryProvider.orElse(KotlinDataFetcherFactoryProvider(generatorHooks))
4963
)
64+
}
5065

5166
@Bean
5267
@ConditionalOnMissingBean

0 commit comments

Comments
 (0)