diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..34a178f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,2 @@ +[*.{kt,kts}] +ktlint_standard_no-wildcard-imports = disabled diff --git a/.gitignore b/.gitignore index 904f48d..5637fea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Ignore Gradle project-specific cache directory .gradle +.fleet # Ignore Gradle build output directory build +.idea/ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index e3cc41d..a707f0b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -10,6 +10,7 @@ diff --git a/base/gradle.lockfile b/base/gradle.lockfile index 54ea913..b386fdf 100644 --- a/base/gradle.lockfile +++ b/base/gradle.lockfile @@ -2,42 +2,43 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -ch.qos.logback:logback-classic:1.2.3=compileClasspath,runtimeClasspath -ch.qos.logback:logback-core:1.2.3=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.14.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.14.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.14.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.14.2=compileClasspath,runtimeClasspath +ch.qos.logback:logback-classic:1.4.11=compileClasspath,runtimeClasspath +ch.qos.logback:logback-core:1.4.11=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.8.6=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.3.4=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.7.1=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava:30.1-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:31.0.1-jre=compileClasspath,runtimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:5.1.0=compileClasspath,runtimeClasspath +com.google.inject:guice:7.0.0=compileClasspath,runtimeClasspath com.google.j2objc:j2objc-annotations:1.3=compileClasspath,runtimeClasspath -com.konghq:unirest-java:3.11.09=compileClasspath,runtimeClasspath -commons-codec:commons-codec:1.11=compileClasspath,runtimeClasspath +com.konghq:unirest-java:3.14.5=compileClasspath,runtimeClasspath +commons-codec:commons-codec:1.15=compileClasspath,runtimeClasspath commons-logging:commons-logging:1.2=compileClasspath,runtimeClasspath -dev.misfitlabs.kotlinguice4:kotlin-guice:1.6.0=compileClasspath,runtimeClasspath -info.offthecob.platform:bom:1.0.11=compileClasspath,runtimeClasspath -info.offthecob.platform:common:1.0.11=compileClasspath,runtimeClasspath -io.github.microutils:kotlin-logging:1.7.6=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -net.logstash.logback:logstash-logback-encoder:7.3=compileClasspath,runtimeClasspath -org.apache.httpcomponents:httpasyncclient:4.1.4=compileClasspath,runtimeClasspath +dev.misfitlabs.kotlinguice4:kotlin-guice:3.0.0=compileClasspath,runtimeClasspath +info.offthecob.platform:bom:1.0.15=compileClasspath,runtimeClasspath +info.offthecob.platform:common:1.0.15=compileClasspath,runtimeClasspath +io.github.microutils:kotlin-logging-jvm:3.0.5=compileClasspath,runtimeClasspath +io.github.microutils:kotlin-logging:3.0.5=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +net.logstash.logback:logstash-logback-encoder:7.4=compileClasspath,runtimeClasspath +org.apache.httpcomponents:httpasyncclient:4.1.5=compileClasspath,runtimeClasspath org.apache.httpcomponents:httpclient:4.5.13=compileClasspath,runtimeClasspath org.apache.httpcomponents:httpcore-nio:4.4.13=compileClasspath,runtimeClasspath org.apache.httpcomponents:httpcore:4.4.13=compileClasspath,runtimeClasspath org.apache.httpcomponents:httpmime:4.5.13=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.5.0=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.12.0=compileClasspath,runtimeClasspath org.jetbrains.kotlin:kotlin-reflect:1.4.32=compileClasspath,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0=compileClasspath,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0=compileClasspath,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0=compileClasspath,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib:1.9.0=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.10=compileClasspath,runtimeClasspath org.jetbrains:annotations:13.0=compileClasspath,runtimeClasspath -org.slf4j:jcl-over-slf4j:1.7.25=compileClasspath,runtimeClasspath -org.slf4j:jul-to-slf4j:1.7.25=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:1.7.25=compileClasspath,runtimeClasspath +org.slf4j:jcl-over-slf4j:2.0.9=compileClasspath,runtimeClasspath +org.slf4j:jul-to-slf4j:2.0.9=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/base/src/main/kotlin/BaseModule.kt b/base/src/main/kotlin/BaseModule.kt index cc5f67a..0b76bfa 100644 --- a/base/src/main/kotlin/BaseModule.kt +++ b/base/src/main/kotlin/BaseModule.kt @@ -1,13 +1,13 @@ +import com.google.inject.AbstractModule import com.google.inject.Provides import com.google.inject.Singleton import com.google.inject.name.Named -import dev.misfitlabs.kotlinguice4.KotlinModule const val WORD_URL = "word-url" const val MIT_ECPRICE_WORD_LIST = "https://www.mit.edu/~ecprice/wordlist.10000" const val NUMBER_OF_WORDS = "number-of-words" -class BaseModule : KotlinModule() { +class BaseModule : AbstractModule() { @Provides @Singleton @Named(WORD_URL) diff --git a/library/gradle.lockfile b/library/gradle.lockfile new file mode 100644 index 0000000..3b3a45e --- /dev/null +++ b/library/gradle.lockfile @@ -0,0 +1,19 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.2=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:5.5.1=compileClasspath,runtimeClasspath +com.netflix.graphql.dgs:graphql-dgs-platform:5.5.1=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-reflect:1.9.0=runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains:annotations:13.0=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:1.7.30=compileClasspath +org.slf4j:slf4j-api:1.7.35=runtimeClasspath +empty=annotationProcessor diff --git a/library/library.gradle.kts b/library/library.gradle.kts new file mode 100644 index 0000000..ad68125 --- /dev/null +++ b/library/library.gradle.kts @@ -0,0 +1,22 @@ +import com.netflix.graphql.dgs.codegen.gradle.GenerateJavaTask + +plugins { + id("info.offthecob.Library") + id("com.netflix.dgs.codegen") version "6.0.2" +} + +dependencies { + api("com.fasterxml.jackson.core:jackson-annotations:2.15.2") +} + +tasks { + generateJava { + schemaPaths = mutableListOf("$projectDir/src/main/resources") + packageName = "info.offthecob.examples.library" + generateClient = false + language = "kotlin" + } + build { + dependsOn("generateJava") + } +} diff --git a/library/src/main/resources/schema.graphql b/library/src/main/resources/schema.graphql new file mode 100644 index 0000000..ff520ee --- /dev/null +++ b/library/src/main/resources/schema.graphql @@ -0,0 +1,13 @@ +type Word { + characters: String + weight: Int + color: String +} + +input WordsInput { + numberOfWords: Int +} + +type Query { + words(input: WordsInput!): [Word] +} \ No newline at end of file diff --git a/service/gradle.lockfile b/service/gradle.lockfile new file mode 100644 index 0000000..45f847b --- /dev/null +++ b/service/gradle.lockfile @@ -0,0 +1,68 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +ch.qos.logback:logback-classic:1.4.11=compileClasspath,runtimeClasspath +ch.qos.logback:logback-core:1.4.11=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.7.1=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava:31.0.1-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:7.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:1.3=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.2=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +com.netflix.graphql.dgs.codegen:graphql-dgs-codegen-shared-core:6.0.2=runtimeClasspath +com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:5.5.1=runtimeClasspath +com.netflix.graphql.dgs:graphql-dgs-platform:5.5.1=runtimeClasspath +commons-io:commons-io:2.13.0=compileClasspath,runtimeClasspath +dev.misfitlabs.kotlinguice4:kotlin-guice:3.0.0=compileClasspath,runtimeClasspath +info.offthecob.platform:bom:1.0.15=compileClasspath,runtimeClasspath +info.offthecob.platform:common:1.0.15=compileClasspath,runtimeClasspath +io.github.microutils:kotlin-logging-jvm:3.0.5=compileClasspath,runtimeClasspath +io.github.microutils:kotlin-logging:3.0.5=compileClasspath,runtimeClasspath +io.javalin:javalin:5.6.1=compileClasspath,runtimeClasspath +jakarta.annotation:jakarta.annotation-api:2.1.1=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +jakarta.transaction:jakarta.transaction-api:2.0.0=compileClasspath,runtimeClasspath +net.logstash.logback:logstash-logback-encoder:7.4=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.12.0=compileClasspath,runtimeClasspath +org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-core-common:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-core-server:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-jetty-api:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-jetty-common:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-jetty-server:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty.websocket:websocket-servlet:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-annotations:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-http:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-io:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-jndi:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-plus:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-security:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-server:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-servlet:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-util:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-webapp:11.0.15=compileClasspath,runtimeClasspath +org.eclipse.jetty:jetty-xml:11.0.15=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-reflect:1.4.32=compileClasspath +org.jetbrains.kotlin:kotlin-reflect:1.9.0=runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.10=compileClasspath,runtimeClasspath +org.jetbrains:annotations:24.0.1=compileClasspath,runtimeClasspath +org.ow2.asm:asm-commons:9.5=compileClasspath,runtimeClasspath +org.ow2.asm:asm-tree:9.5=compileClasspath,runtimeClasspath +org.ow2.asm:asm:9.5=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:jcl-over-slf4j:2.0.9=compileClasspath,runtimeClasspath +org.slf4j:jul-to-slf4j:2.0.9=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.9=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/service/service.gradle.kts b/service/service.gradle.kts new file mode 100644 index 0000000..5313a2e --- /dev/null +++ b/service/service.gradle.kts @@ -0,0 +1,18 @@ +plugins { + id("info.offthecob.Service") +} + +dependencies { + implementation(project(":library")) + implementation(platform(libs.offthecob.platform)) + implementation("info.offthecob.platform:common") + implementation(libs.bundles.guice) + implementation(libs.bundles.logging) + implementation(libs.javalin) + implementation(libs.gson) + implementation(libs.graphql) + implementation(libs.commons.io) + + testImplementation(libs.bundles.groovy) + testImplementation(libs.bundles.spock) +} diff --git a/service/src/main/kotlin/DataFetchers.kt b/service/src/main/kotlin/DataFetchers.kt new file mode 100644 index 0000000..1c8d6c5 --- /dev/null +++ b/service/src/main/kotlin/DataFetchers.kt @@ -0,0 +1,11 @@ +import graphql.schema.DataFetcher +import info.offthecob.examples.library.types.Word + +class DataFetchers { + fun getWords(): DataFetcher> { + return DataFetcher> { input -> + input.variables["numberOfWords"] + listOf(Word("dude", 1, "FFFFFF")) + } + } +} diff --git a/service/src/main/kotlin/GraphQLHandler.kt b/service/src/main/kotlin/GraphQLHandler.kt new file mode 100644 index 0000000..4f20e3b --- /dev/null +++ b/service/src/main/kotlin/GraphQLHandler.kt @@ -0,0 +1,65 @@ +import com.google.gson.Gson +import com.google.inject.Inject +import graphql.ExecutionInput +import graphql.ExecutionResult +import graphql.GraphQL +import io.javalin.http.Context +import io.javalin.http.Handler + +data class GraphqlRequest( + val query: String, + val variables: Map?, + val operationName: String?, +) + +class GraphQLHandler @Inject constructor( + private val graphql: GraphQL, + private val gson: Gson, +) : Handler { + override fun handle(ctx: Context) { + if (ctx.body().isEmpty()) { + ctx.status(400) + ctx.result("Bad Request") + } else { + handleGraphqlRequest(ctx) + } + } + + private fun handleGraphqlRequest(ctx: Context) { + val graphqlRequest = gson.fromJson(ctx.body(), GraphqlRequest::class.java) + val executionInput = executionInput(graphqlRequest, ctx) + val executionResult = graphql.execute(executionInput) + handleGraphqlExecutionResult(executionResult, ctx) + } + + private fun handleGraphqlExecutionResult(executionResult: ExecutionResult, ctx: Context) { + if (executionResult.isDataPresent) { + ctx.result(gson.toJson(executionResult.toSpecification())) + ctx.status(200) + } else { + ctx.result("Bad Request") + ctx.status(400) + } + } + + private fun executionInput(graphqlRequest: GraphqlRequest, ctx: Context): ExecutionInput { + val executionInputBuilder = ExecutionInput + .newExecutionInput(graphqlRequest.query) + .context(ctx) + variables(graphqlRequest, executionInputBuilder) + operationName(graphqlRequest, executionInputBuilder) + return executionInputBuilder.build() + } + + private fun operationName(graphqlRequest: GraphqlRequest, executionInputBuilder: ExecutionInput.Builder) { + if (graphqlRequest.operationName?.isNotEmpty() == true) { + executionInputBuilder.operationName(graphqlRequest.operationName) + } + } + + private fun variables(graphqlRequest: GraphqlRequest, executionInputBuilder: ExecutionInput.Builder) { + if (graphqlRequest.variables?.isNotEmpty() == true) { + executionInputBuilder.variables(graphqlRequest.variables) + } + } +} diff --git a/service/src/main/kotlin/ServiceMain.kt b/service/src/main/kotlin/ServiceMain.kt new file mode 100644 index 0000000..63bb2c1 --- /dev/null +++ b/service/src/main/kotlin/ServiceMain.kt @@ -0,0 +1,24 @@ +import com.google.inject.Guice +import com.google.inject.Inject +import dev.misfitlabs.kotlinguice4.getInstance +import io.javalin.Javalin + +fun main() { + Guice + .createInjector(ServiceModule()) + .getInstance() + .apply { + go() + } +} + +class ServiceMain @Inject constructor( + private val javalin: Javalin, + private val graphQLHandler: GraphQLHandler, +) { + fun go() { + javalin + .post("/graphql", graphQLHandler) + .start() + } +} diff --git a/service/src/main/kotlin/ServiceModule.kt b/service/src/main/kotlin/ServiceModule.kt new file mode 100644 index 0000000..efa68f4 --- /dev/null +++ b/service/src/main/kotlin/ServiceModule.kt @@ -0,0 +1,69 @@ +import com.google.inject.AbstractModule +import com.google.inject.Provides +import com.google.inject.Singleton +import com.google.inject.name.Named +import graphql.GraphQL +import graphql.schema.idl.* +import info.offthecob.examples.library.DgsConstants.QUERY.Words +import info.offthecob.examples.library.DgsConstants.QUERY_TYPE +import io.javalin.Javalin +import org.apache.commons.io.IOUtils +import java.io.IOException +import java.nio.charset.StandardCharsets + +const val GRAPHQL_SCHEMA = "graphql-schema" +const val PORT = "port" + +class ServiceModule : AbstractModule() { + + @Provides + @Singleton + fun javalin(): Javalin { + return Javalin.create { config -> + config.staticFiles.add { staticFiles -> + staticFiles.directory = "/static" + } + } + } + + @Provides + @Named(GRAPHQL_SCHEMA) + @Throws(IOException::class) + fun graphQlSchema(): String { + ServiceModule::class.java.getResourceAsStream("/schema.graphql").use { inputStream -> + return IOUtils.toString( + inputStream, + StandardCharsets.UTF_8, + ) + } + } + + @Provides + @Singleton + fun runtimeWiringBuilder(dataFetchers: DataFetchers): RuntimeWiring { + return RuntimeWiring + .newRuntimeWiring() + .type(QUERY_TYPE) { builder -> + builder.dataFetcher(Words, dataFetchers.getWords()) + builder + }.build() + } + + @Provides + @Singleton + @Throws(IOException::class) + fun typeDefinitionRegistryProvider(@Named(GRAPHQL_SCHEMA) schema: String): TypeDefinitionRegistry { + return SchemaParser().parse(schema) + } + + @Provides + @Singleton + fun graphQL( + typeDefinitionRegistry: TypeDefinitionRegistry, + schemaGenerator: SchemaGenerator, + runtimeWiring: RuntimeWiring, + ): GraphQL { + val graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring) + return GraphQL.newGraphQL(graphQLSchema).build() + } +} diff --git a/service/src/main/resources/logback.xml b/service/src/main/resources/logback.xml new file mode 100644 index 0000000..35613bc --- /dev/null +++ b/service/src/main/resources/logback.xml @@ -0,0 +1,11 @@ + + + + %-5level %logger{36} - %msg%n + + + + + + + diff --git a/service/src/main/resources/static/graphiql/index.html b/service/src/main/resources/static/graphiql/index.html new file mode 100644 index 0000000..f632bc8 --- /dev/null +++ b/service/src/main/resources/static/graphiql/index.html @@ -0,0 +1,55 @@ + + + + GraphiQL + + + + + + + + + +
Loading...
+ + + diff --git a/settings-gradle.lockfile b/settings-gradle.lockfile index c769b65..7defbf6 100644 --- a/settings-gradle.lockfile +++ b/settings-gradle.lockfile @@ -1,5 +1,5 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -info.offthecob.platform:catalog:1.0.11=incomingCatalogForLibs0 +info.offthecob.platform:catalog:1.0.15=incomingCatalogForLibs0 empty= diff --git a/settings.gradle.kts b/settings.gradle.kts index ccf8b16..0946fe8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("info.offthecob.Settings") version "1.0.11" + id("info.offthecob.Settings") version "1.0.15" } rootProject.name = "offthecob-platform-examples" @@ -11,8 +11,7 @@ dependencyResolutionManagement { versionCatalogs { create("libs") { - from("info.offthecob.platform:catalog:1.0.11") - library("offthecob-platform", "info.offthecob.platform:bom:1.0.11") + from("info.offthecob.platform:catalog:1.0.15") } } }