type Product implements Node { """The ID of an object""" id: ID! } type Query { getProductsByName(name: String!, before: String, after: String, first: Int, last: Int): ProductConnection """Fetches an object given its Globally Unique ID""" node( """The ID of the object""" id: ID! ): Node } type Mutation { createProduct(input: CreateProductInput): CreateProductPayload } input CreateProductInput { clientMutationId: String! name: String! gtin: String! description: String! } type CreateProductPayload { clientMutationId: String! edge: ProductEdge } """An object with a Globally Unique ID""" interface Node { """The ID of the object.""" id: ID! } type ProductConnection { """Information to aid in pagination.""" edges: [ProductEdge] """Information to aid in pagination.""" pageInfo: PageInfo! } type ProductEdge { """cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: Product } """Information about pagination in a connection.""" type PageInfo { """When paginating forwards, the cursor to continue.""" endCursor: String """When paginating forwards, are there more items?""" hasNextPage: Boolean! """When paginating backwards, are there more items?""" hasPreviousPage: Boolean! """When paginating backwards, the cursor to continue.""" startCursor: String }