package graphql; import graphql.relay.Relay; import graphql.schema.*; import java.util.ArrayList; import static graphql.Scalars.GraphQLString; import static graphql.schema.GraphQLArgument.newArgument; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; public class RelaySchema { public static Relay relay = new Relay(); public static GraphQLObjectType StuffType = newObject() .name("Stuff") .field(newFieldDefinition() .name("id") .type(GraphQLString) .fetchField()) .build(); public static GraphQLInterfaceType NodeInterface = relay.nodeInterface(env -> { Relay.ResolvedGlobalId resolvedGlobalId = relay.fromGlobalId((String) env.getObject()); //TODO: implement return null; }); public static GraphQLObjectType StuffEdgeType = relay.edgeType("Stuff", StuffType, NodeInterface, new ArrayList<>()); public static GraphQLObjectType StuffConnectionType = relay.connectionType("Stuff", StuffEdgeType, new ArrayList<>()); public static GraphQLObjectType ThingType = newObject() .name("Thing") .field(newFieldDefinition() .name("id") .type(GraphQLString) .fetchField()) .field(newFieldDefinition() .name("stuffs") .type(StuffConnectionType)) .build(); public static GraphQLObjectType RelayQueryType = newObject() .name("RelayQuery") .field(relay.nodeField(NodeInterface, environment -> { //TODO: implement return null; })) .field(newFieldDefinition() .name("thing") .type(ThingType) .argument(newArgument() .name("id") .description("id of the thing") .type(new GraphQLNonNull(GraphQLString))) .dataFetcher(environment -> { //TODO: implement return null; })) .build(); public static GraphQLSchema Schema = GraphQLSchema.newSchema() .query(RelayQueryType) .build(); }