From 86383726afaeb6dc8931a627871f49d9e75b7294 Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Sat, 7 Aug 2021 10:27:34 +0700 Subject: [PATCH] Task: Add basic for graphql implements and add graphql playground and add schema and query and subscription resolver --- build.gradle.kts | 5 ++-- .../graphql/demo/GraphqlDemoApplication.kt | 2 +- .../cubetiqs/graphql/demo/context/GQuery.kt | 12 ++++++++++ .../cubetiqs/graphql/demo/query/HelloQuery.kt | 13 +++++++++++ .../resolver/HelloSubscriptionResolver.kt | 15 ++++++++++++ src/main/resources/application.yml | 23 ++++++++++++++++++- src/main/resources/schema.graphqls | 7 ++++++ 7 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/com/cubetiqs/graphql/demo/context/GQuery.kt create mode 100644 src/main/kotlin/com/cubetiqs/graphql/demo/query/HelloQuery.kt create mode 100644 src/main/kotlin/com/cubetiqs/graphql/demo/resolver/HelloSubscriptionResolver.kt create mode 100644 src/main/resources/schema.graphqls diff --git a/build.gradle.kts b/build.gradle.kts index 1ee1e6e..1ddd3b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,9 +20,10 @@ extra["graphqlVersion"] = "11.0.0" dependencies { implementation("com.graphql-java-kickstart:graphql-spring-boot-starter:${property("graphqlVersion")}") - implementation("com.graphql-java-kickstart:graphiql-spring-boot-starter:${property("graphqlVersion")}") + implementation("com.graphql-java-kickstart:playground-spring-boot-starter:${property("graphqlVersion")}") implementation("com.graphql-java-kickstart:voyager-spring-boot-starter:${property("graphqlVersion")}") + implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-webflux") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") @@ -48,4 +49,4 @@ tasks.withType { tasks.withType { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/kotlin/com/cubetiqs/graphql/demo/GraphqlDemoApplication.kt b/src/main/kotlin/com/cubetiqs/graphql/demo/GraphqlDemoApplication.kt index bb8a9aa..2036987 100644 --- a/src/main/kotlin/com/cubetiqs/graphql/demo/GraphqlDemoApplication.kt +++ b/src/main/kotlin/com/cubetiqs/graphql/demo/GraphqlDemoApplication.kt @@ -7,5 +7,5 @@ import org.springframework.boot.runApplication class GraphqlDemoApplication fun main(args: Array) { - runApplication(*args) + runApplication(*args) } diff --git a/src/main/kotlin/com/cubetiqs/graphql/demo/context/GQuery.kt b/src/main/kotlin/com/cubetiqs/graphql/demo/context/GQuery.kt new file mode 100644 index 0000000..e72c45e --- /dev/null +++ b/src/main/kotlin/com/cubetiqs/graphql/demo/context/GQuery.kt @@ -0,0 +1,12 @@ +package com.cubetiqs.graphql.demo.context + +import org.springframework.core.annotation.AliasFor +import org.springframework.stereotype.Component + +@Retention(AnnotationRetention.RUNTIME) +@Target(AnnotationTarget.CLASS) +@Component +annotation class GQuery( + @get:AliasFor(annotation = Component::class) + val value: String = "", +) diff --git a/src/main/kotlin/com/cubetiqs/graphql/demo/query/HelloQuery.kt b/src/main/kotlin/com/cubetiqs/graphql/demo/query/HelloQuery.kt new file mode 100644 index 0000000..8078c49 --- /dev/null +++ b/src/main/kotlin/com/cubetiqs/graphql/demo/query/HelloQuery.kt @@ -0,0 +1,13 @@ +package com.cubetiqs.graphql.demo.query + +import com.cubetiqs.graphql.demo.context.GQuery +import graphql.kickstart.tools.GraphQLQueryResolver +import reactor.core.publisher.Mono +import java.util.concurrent.CompletableFuture + +@GQuery +class HelloQuery : GraphQLQueryResolver { + fun hello(): CompletableFuture { + return Mono.just("Hello Query...!").toFuture() + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/cubetiqs/graphql/demo/resolver/HelloSubscriptionResolver.kt b/src/main/kotlin/com/cubetiqs/graphql/demo/resolver/HelloSubscriptionResolver.kt new file mode 100644 index 0000000..53f6479 --- /dev/null +++ b/src/main/kotlin/com/cubetiqs/graphql/demo/resolver/HelloSubscriptionResolver.kt @@ -0,0 +1,15 @@ +package com.cubetiqs.graphql.demo.resolver + +import graphql.kickstart.tools.GraphQLSubscriptionResolver +import graphql.schema.DataFetchingEnvironment +import org.reactivestreams.Publisher +import org.springframework.stereotype.Service +import reactor.core.publisher.Flux +import java.time.Duration + +@Service +class HelloSubscriptionResolver : GraphQLSubscriptionResolver { + fun hello(env: DataFetchingEnvironment): Publisher { + return Flux.range(1, 10).delayElements(Duration.ofSeconds(1)) + } +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 52dcad1..6a954ab 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,9 +1,30 @@ server: port: 8081 +# Spring Boot spring: datasource: url: jdbc:postgresql://192.168.0.202:5432/graphql-demo username: cubetiq password: cubetiq007 - driver-class-name: org.postgresql.Driver \ No newline at end of file + driver-class-name: org.postgresql.Driver + +# Spring Boot Actuator +management: + endpoints: + web: + exposure: + include: health,info,metrics + +# GraphQL Voyager +voyager: + enabled: true + cdn: + enabled: false + +# GraphQL Playground +graphql: + playground: + enabled: true + cdn: + enabled: false \ No newline at end of file diff --git a/src/main/resources/schema.graphqls b/src/main/resources/schema.graphqls new file mode 100644 index 0000000..216c610 --- /dev/null +++ b/src/main/resources/schema.graphqls @@ -0,0 +1,7 @@ +type Query { + hello: String +} + +type Subscription { + hello: Int +} \ No newline at end of file