Skip to content

Commit d66ee13

Browse files
dariuszkuctapaderster
authored andcommitted
[spring-server] make sdl endpoint customizable (ExpediaGroup#457)
New configuration properties: * graphql.sdl.enabled - Boolean flag to indicate whether SDL endpoint should be enabled, defaults to true * graphql.sdl.endpoint - SDL endpoint, defaults to /sdl
1 parent bb4b6b3 commit d66ee13

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ data class GraphQLConfigurationProperties(
3131
val packages: List<String>,
3232
val federation: FederationConfigurationProperties = FederationConfigurationProperties(),
3333
val subscriptions: SubscriptionConfigurationProperties = SubscriptionConfigurationProperties(),
34-
val playground: PlaygroundConfigurationProperties = PlaygroundConfigurationProperties()
34+
val playground: PlaygroundConfigurationProperties = PlaygroundConfigurationProperties(),
35+
val sdl: SDLConfigurationProperties = SDLConfigurationProperties()
3536
)
3637

3738
/**
@@ -61,3 +62,13 @@ data class PlaygroundConfigurationProperties(
6162
/** Prisma Labs Playground GraphQL IDE endpoint, defaults to 'playground' */
6263
val endpoint: String = "playground"
6364
)
65+
66+
/**
67+
* SDL endpoint configuration properties.
68+
*/
69+
data class SDLConfigurationProperties(
70+
/** Boolean flag indicating whether SDL endpoint is enabled */
71+
val enabled: Boolean = true,
72+
/** GraphQL SDL endpoint */
73+
val endpoint: String = "sdl"
74+
)

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

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

1717
package com.expediagroup.graphql.spring
1818

19-
import kotlinx.coroutines.ExperimentalCoroutinesApi
2019
import org.springframework.beans.factory.annotation.Value
2120
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
2221
import org.springframework.context.annotation.Bean
@@ -39,7 +38,6 @@ class PlaygroundAutoConfiguration(
3938
) {
4039

4140
@Bean
42-
@ExperimentalCoroutinesApi
4341
fun playgroundRoute(): RouterFunction<ServerResponse> {
4442
val body = playgroundHtml.inputStream.bufferedReader().use { reader ->
4543
reader.readText()

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
2323
import com.fasterxml.jackson.databind.type.MapType
2424
import com.fasterxml.jackson.databind.type.TypeFactory
2525
import graphql.schema.GraphQLSchema
26-
import kotlinx.coroutines.ExperimentalCoroutinesApi
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
2727
import org.springframework.context.annotation.Bean
2828
import org.springframework.context.annotation.Configuration
2929
import org.springframework.http.HttpMethod
@@ -49,7 +49,6 @@ class RoutesConfiguration(
4949
private val mapTypeReference: MapType = TypeFactory.defaultInstance().constructMapType(HashMap::class.java, String::class.java, Any::class.java)
5050

5151
@Bean
52-
@ExperimentalCoroutinesApi
5352
fun graphQLRoutes() = coRouter {
5453
(POST(config.endpoint) or GET(config.endpoint)).invoke { serverRequest ->
5554
val graphQLRequest = createGraphQLRequest(serverRequest)
@@ -60,7 +59,12 @@ class RoutesConfiguration(
6059
badRequest().buildAndAwait()
6160
}
6261
}
63-
GET("/sdl") {
62+
}
63+
64+
@Bean
65+
@ConditionalOnProperty(value = ["graphql.sdl.enabled"], havingValue = "true", matchIfMissing = true)
66+
fun sdlRoute() = coRouter {
67+
GET(config.sdl.endpoint) {
6468
ok().contentType(MediaType.TEXT_PLAIN).bodyValueAndAwait(schema.print())
6569
}
6670
}

0 commit comments

Comments
 (0)