Skip to content

Instantly share code, notes, and snippets.

@brfrn169
Last active June 20, 2018 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save brfrn169/f8b8e57bb3a79540aace to your computer and use it in GitHub Desktop.
Save brfrn169/f8b8e57bb3a79540aace to your computer and use it in GitHub Desktop.
import {
graphql,
GraphQLSchema,
GraphQLObjectType,
GraphQLNonNull,
GraphQLList,
GraphQLString,
} from 'graphql';
// data
var toshihiro = {
name: 'Toshihiro Suzuki',
friends: ['2', '3'],
};
var ichiro = {
name: 'Ichiro Fukuda',
friends: ['1'],
};
var ryota = {
name: 'Ryota Nishio',
friends: ['1'],
};
var users = {
1: toshihiro,
2: ichiro,
3: ryota,
};
var loginUser = toshihiro;
function getFriends(user) {
return user.friends.map(id => users[id]);
}
// schema
// type User {
// name: String
// friends: [User]
// }
var userType = new GraphQLObjectType({
name: 'User',
fields: () => ({
name: {
type: GraphQLString,
},
friends: {
type: new GraphQLList(userType),
resolve: (user) => getFriends(user),
},
}),
});
// type Query {
// me: User
// user(id: Int): User
// }
var queryType = new GraphQLObjectType({
name: 'Query',
fields: () => ({
me: {
type: userType,
resolve: () => loginUser,
},
user: {
type: userType,
args: {
id: {
name: 'id',
type: new GraphQLNonNull(GraphQLString),
}
},
resolve: (root, {id}) => users[id],
},
}),
});
var schema = new GraphQLSchema({
query: queryType,
});
// query
var query = '{ me { name } }';
graphql(schema, query).then(result => {
// handle the result
// {
// "me": "Toshihiro Suzuki"
// }
});
var query = '{ me { name friends { name } } }';
graphql(schema, query).then(result => {
// handle the result
// {
// "me": "Toshihiro Suzuki",
// "friends": [
// {
// "name": "Ichiro Fukuda"
// },
// {
// "name": "Ryota Nishio"
// }
// ]
// }
});
var query = '{ user(id: "2") { name friends { name } } }'
graphql(schema, query).then(result => {
// handle the result
// {
// "user": "Ichiro Fukuda",
// "friends": [
// {
// "name": "Toshihiro Suzuki"
// }
// ]
// }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment