diff --git a/src/main/java/io/github/mstachniuk/graphqljavaexample/graphql/codefirst/CodeFirstConfiguration.java b/src/main/java/io/github/mstachniuk/graphqljavaexample/graphql/codefirst/CodeFirstConfiguration.java index 2c8302e..104b355 100644 --- a/src/main/java/io/github/mstachniuk/graphqljavaexample/graphql/codefirst/CodeFirstConfiguration.java +++ b/src/main/java/io/github/mstachniuk/graphqljavaexample/graphql/codefirst/CodeFirstConfiguration.java @@ -4,6 +4,7 @@ import io.github.mstachniuk.graphqljavaexample.company.CompanyDataFetcher; import io.github.mstachniuk.graphqljavaexample.customer.*; import io.github.mstachniuk.graphqljavaexample.item.ItemDataFetcher; +import io.github.mstachniuk.graphqljavaexample.node.NodeResolver; import io.github.mstachniuk.graphqljavaexample.order.OrderDataFetcher; import io.github.mstachniuk.graphqljavaexample.search.SearchDataFetcher; import io.github.mstachniuk.graphqljavaexample.search.SearchResultResolver; @@ -66,6 +67,7 @@ private GraphQLFieldDefinition customerDefinition() { .name("id") .type(new GraphQLNonNull(GraphQLString))) .type(new GraphQLNonNull(GraphQLObjectType.newObject() + .withInterface(nodeInterfaceDefinition()) .name("Customer") .field(GraphQLFieldDefinition.newFieldDefinition() .name("id") @@ -390,4 +392,15 @@ private GraphQLFieldDefinition searchDefinition() { .dataFetcher(searchDataFetcher) .build(); } + + private GraphQLInterfaceType nodeInterfaceDefinition() { + return GraphQLInterfaceType.newInterface() + .name("Node") + .field(GraphQLFieldDefinition.newFieldDefinition() + .name("id") + .type(new GraphQLNonNull(GraphQLID)) + .build()) + .typeResolver(new NodeResolver()) + .build(); + } } diff --git a/src/main/java/io/github/mstachniuk/graphqljavaexample/node/NodeResolver.java b/src/main/java/io/github/mstachniuk/graphqljavaexample/node/NodeResolver.java new file mode 100644 index 0000000..7981aba --- /dev/null +++ b/src/main/java/io/github/mstachniuk/graphqljavaexample/node/NodeResolver.java @@ -0,0 +1,12 @@ +package io.github.mstachniuk.graphqljavaexample.node; + +import graphql.TypeResolutionEnvironment; +import graphql.schema.GraphQLObjectType; +import graphql.schema.TypeResolver; + +public class NodeResolver implements TypeResolver { + @Override + public GraphQLObjectType getType(TypeResolutionEnvironment env) { + return null; + } +} diff --git a/src/main/resources/graphql/model.graphqls b/src/main/resources/graphql/model.graphqls index eb69c5c..5d73fda 100644 --- a/src/main/resources/graphql/model.graphqls +++ b/src/main/resources/graphql/model.graphqls @@ -7,7 +7,7 @@ type Customer { orders: [Order] } -type Company { +type Company implements Node { id: ID! name: String! website: String! @@ -23,7 +23,7 @@ enum Status { NEW, CANCELED, DONE } -type Item { +type Item implements Node { id: ID! name: String! amount: Int @@ -87,14 +87,14 @@ interface User { email: String! } -type Admin implements User { +type Admin implements Node & User { id: ID! name: String! email: String! superAdmin: Boolean! } -type Moderator implements User { +type Moderator implements Node & User { id: ID! name: String! email: String! @@ -102,3 +102,9 @@ type Moderator implements User { } union SearchResult = Customer | Admin | Moderator + +#An object with an ID +interface Node { + #The ID of an object + id: ID! +} \ No newline at end of file