@@ -26,7 +26,7 @@ Source code: https://github.com/nodkz/graphql-compose-mongoose-example
26
26
``` js
27
27
import mongoose from ' mongoose' ;
28
28
import composeWithMongoose from ' graphql-compose-mongoose' ;
29
- import { GraphQLSchema , GraphQLObjectType } from ' graphql' ;
29
+ import { GQC } from ' graphql-compose ' ;
30
30
31
31
// STEP 1: DEFINE MONGOOSE SCHEMA AND MODEL
32
32
const LanguagesSchema = new mongoose.Schema ({
@@ -66,43 +66,30 @@ const UserModel = mongoose.model('UserModel', UserSchema);
66
66
67
67
// STEP 2: CONVERT MONGOOSE MODEL TO GraphQL PIECES
68
68
const customizationOptions = {}; // left it empty for simplicity, described below
69
- const typeComposer = composeWithMongoose (UserModel, customizationOptions);
70
- // get list of 12 Resolvers (findById, updateMany and others)
71
- const resolvers = typeComposer .getResolvers ();
72
-
73
- // typeComposer from (graphql-compose) provide bunch if useful methods
74
- // for modifying GraphQL Types (eg. add/remove fields, relate with other types,
75
- // restrict access due context).
76
-
69
+ const UserTC = composeWithMongoose (UserModel, customizationOptions);
77
70
78
71
// STEP 3: CREATE CRAZY GraphQL SCHEMA WITH ALL CRUD USER OPERATIONS
79
72
// via graphql-compose it will be much much easier, with less typing
80
- const graphqlSchema = new GraphQLSchema ({
81
- query: new GraphQLObjectType ({
82
- name: ' RootQuery' ,
83
- fields: {
84
- userById: resolvers .get (' findById' ).getFieldConfig (),
85
- userByIds: resolvers .get (' findByIds' ).getFieldConfig (),
86
- userOne: resolvers .get (' findOne' ).getFieldConfig (),
87
- userMany: resolvers .get (' findMany' ).getFieldConfig (),
88
- userTotal: resolvers .get (' count' ).getFieldConfig (),
89
- userConnection: resolvers .get (' connection' ).getFieldConfig (),
90
- },
91
- }),
92
- mutation: new GraphQLObjectType ({
93
- name: ' RootMutation' ,
94
- fields: {
95
- userCreate: resolvers .get (' createOne' ).getFieldConfig (),
96
- userUpdateById: resolvers .get (' updateById' ).getFieldConfig (),
97
- userUpdateOne: resolvers .get (' updateOne' ).getFieldConfig (),
98
- userUpdateMany: resolvers .get (' updateMany' ).getFieldConfig (),
99
- userRemoveById: resolvers .get (' removeById' ).getFieldConfig (),
100
- userRemoveOne: resolvers .get (' removeOne' ).getFieldConfig (),
101
- userRemoveMany: resolvers .get (' removeMany' ).getFieldConfig (),
102
- },
103
- }),
73
+ GQC .rootQuery ().addFields ({
74
+ userById: UserTC .getResolver (' findById' ),
75
+ userByIds: UserTC .getResolver (' findByIds' ),
76
+ userOne: UserTC .getResolver (' findOne' ),
77
+ userMany: UserTC .getResolver (' findMany' ),
78
+ userTotal: UserTC .getResolver (' count' ),
79
+ userConnection: UserTC .getResolver (' connection' ),
80
+ });
81
+
82
+ GQC .rootMutation ().addFields ({
83
+ userCreate: UserTC .getResolver (' createOne' ),
84
+ userUpdateById: UserTC .getResolver (' updateById' ),
85
+ userUpdateOne: UserTC .getResolver (' updateOne' ),
86
+ userUpdateMany: UserTC .getResolver (' updateMany' ),
87
+ userRemoveById: UserTC .getResolver (' removeById' ),
88
+ userRemoveOne: UserTC .getResolver (' removeOne' ),
89
+ userRemoveMany: UserTC .getResolver (' removeMany' ),
104
90
});
105
91
92
+ const graphqlSchema = GQC .buildSchema ();
106
93
export default graphqlSchema ;
107
94
```
108
95
That's all!
@@ -112,7 +99,7 @@ I don't think so, because by default internally was created about 55 graphql typ
112
99
113
100
Customization options
114
101
=====================
115
- When we convert model ` const typeComposer = composeWithMongoose(UserModel, customizationOptions); ` you may tune every piece of future derived types and resolvers.
102
+ When we convert model ` const UserTC = composeWithMongoose(UserModel, customizationOptions); ` you may tune every piece of future derived types and resolvers.
116
103
117
104
### Here is flow typed definition of this options:
118
105
0 commit comments