ExpediaGroup / graphql-kotlin

Libraries for running GraphQL in Kotlin

Home Page:https://opensource.expediagroup.com/graphql-kotlin/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unable to retrieve federated types with apollo federation v1

Jasper-ui opened this issue · comments

Hi guys, I am unable to retrieve federated types with apollo federation v1. I am gettign this error with the below classes

end_time {
  seconds: 1709241684
  nanos: 935868841
}
start_time {
  seconds: 1709241684
  nanos: 902215362
}
duration_ns: 33656653
root {
  child {
    response_name: "_entities"
    type: "[_Entity]!"
    start_time: 19058924
    end_time: 32150362
    error {
      message: "Unable to resolve federated type, representation={__typename=Property, primaryKey=8db0b295-e4c5-48c8-8dc6-84d79853f7f0}"
      location {
        line: 4294967295
        column: 4294967295
      }
    }
    parent_type: "Query"
  }
}

Resolver

class PropertyResolver(
    private val control: IApartmentGraphqlControl
) : FederatedTypeSuspendResolver<PropertyResolver.Property> {
    override val typeName = "Property"
    override suspend fun resolve(
        environment: DataFetchingEnvironment,
        representation: Map<String, Any>
    ): Property? =
        representation["primaryKey"]?.toString()?.let { id -> Property(id, control) }

    @KeyDirective(fields = FieldSet("primaryKey"))
    @ExtendsDirective
    data class Property(
        @ExternalDirective val primaryKey: String,
        private val control: IApartmentGraphqlControl
    ) {
        fun apartments(): List<GraphqlApartmentOutput> = control.findAllApartmentsForProperty(UUID.fromString(primaryKey))

    }

}
graphql:
  schema:
    registry:
      enabled: ${GRAPHQL_SCHEMA_REGISTRY_ENABLED}
      url: ${GRAPHQL_SCHEMA_REGISTRY_URL}
      token: ${GRAPHQL_SCHEMA_REGISTRY_API_TOKEN}
      servlet: "/graphql"
      service:
        port: ${server.port}
        serverName: localhost
        name: "{microservice.name}"
        version: "1.0.0"
  federation:
    optInV2: false
    enabled: true
    tracing:
      enabled: true
      debug: true
  maxPageSize: 32
  packages:
    - "com.example.apartment"
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
	id("org.springframework.boot") version "3.1.4"
	id("io.spring.dependency-management") version "1.1.3"
	id("com.expediagroup.graphql") version "7.0.2"
	kotlin("jvm") version "1.8.22"
	kotlin("plugin.spring") version "1.8.22"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

java {
	sourceCompatibility = JavaVersion.VERSION_19
}

repositories {
	mavenCentral()
	maven("https://jitpack.io")
	maven {
		url = uri("https://plugins.gradle.org/m2/")
	}
}

dependencies {
	implementation("org.springframework.boot:spring-boot-starter")
	implementation("org.springframework.boot:spring-boot-starter-actuator")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("software.amazon.awssdk:dynamodb:2.20.153")
	implementation("software.amazon.awssdk:auth:2.20.153")
	implementation ("com.github.oharaandrew314:dynamodb-kotlin-module:0.3.0")
	implementation ("io.github.oshai:kotlin-logging-jvm:5.1.0")
	implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.2")
	implementation("com.expediagroup:graphql-kotlin-federation:7.0.2")
	implementation("com.expediagroup:graphql-kotlin-federated-hooks-provider:7.0.2")
	implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.2")
	implementation("javax.validation:validation-api:2.0.0.Final")
	implementation("org.json:json:20230618")
	graphqlSDL("com.expediagroup", "graphql-kotlin-federated-hooks-provider")
	testImplementation("com.graphql-java-kickstart:graphql-spring-boot-starter-test:15.0.0")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
	testImplementation ("io.kotest:kotest-runner-junit5:5.7.2")
	testImplementation ("io.kotest:kotest-assertions-core:5.7.2")
	testImplementation("org.http4k:http4k-connect-amazon-dynamodb-fake:5.2.0.0")
	testImplementation ("org.junit.jupiter:junit-jupiter-api:5.8.1")
	testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.1")
}

tasks.named("build") {
	dependsOn("bootJar")
	dependsOn("graphqlGenerateSDL")
}

apply(plugin = "com.expediagroup.graphql")


tasks.withType<KotlinCompile> {
	kotlinOptions {
		freeCompilerArgs += "-Xjsr305=strict"
		jvmTarget = "19"
	}
}

tasks.withType<Test> {
	useJUnitPlatform()
}

property class in property MS

@GraphQLName("Property")
@KeyDirective(fields = FieldSet("primaryKey"))
data class GraphqlPropertyOutput(
        val primaryKey: String,
        val name: String,
        val landlordName: String,
        val createdAt: String,
        val updatedAt: String
)

Forgot to add @component to the resolver 🤦