todo/data/schema.graphql (119 lines of code) (raw):

type Query { user(id: String): User """Fetches an object given its ID""" node( """The ID of an object""" id: ID! ): Node } type User implements Node { """The ID of an object""" id: ID! userId: String! todos(status: String = "any", after: String, first: Int, before: String, last: Int): TodoConnection totalCount: Int! completedCount: Int! } """An object with an ID""" interface Node { """The id of the object.""" id: ID! } """A connection to a list of items.""" type TodoConnection { """Information to aid in pagination.""" pageInfo: PageInfo! """A list of edges.""" edges: [TodoEdge] } """Information about pagination in a connection.""" type PageInfo { """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 """When paginating forwards, the cursor to continue.""" endCursor: String } """An edge in a connection.""" type TodoEdge { """The item at the end of the edge""" node: Todo """A cursor for use in pagination""" cursor: String! } type Todo implements Node { """The ID of an object""" id: ID! text: String! complete: Boolean! } type Mutation { addTodo(input: AddTodoInput!): AddTodoPayload changeTodoStatus(input: ChangeTodoStatusInput!): ChangeTodoStatusPayload markAllTodos(input: MarkAllTodosInput!): MarkAllTodosPayload removeCompletedTodos(input: RemoveCompletedTodosInput!): RemoveCompletedTodosPayload removeTodo(input: RemoveTodoInput!): RemoveTodoPayload renameTodo(input: RenameTodoInput!): RenameTodoPayload } type AddTodoPayload { todoEdge: TodoEdge! user: User! clientMutationId: String } input AddTodoInput { text: String! userId: ID! clientMutationId: String } type ChangeTodoStatusPayload { todo: Todo! user: User! clientMutationId: String } input ChangeTodoStatusInput { complete: Boolean! id: ID! userId: ID! clientMutationId: String } type MarkAllTodosPayload { changedTodos: [Todo!] user: User! clientMutationId: String } input MarkAllTodosInput { complete: Boolean! userId: ID! clientMutationId: String } type RemoveCompletedTodosPayload { deletedTodoIds: [ID!] user: User! clientMutationId: String } input RemoveCompletedTodosInput { userId: ID! clientMutationId: String } type RemoveTodoPayload { deletedTodoId: ID! user: User! clientMutationId: String } input RemoveTodoInput { id: ID! userId: ID! clientMutationId: String } type RenameTodoPayload { todo: Todo! clientMutationId: String } input RenameTodoInput { id: ID! text: String! clientMutationId: String }