@@ -92,9 +92,9 @@ const User = mongoose.model('User', UserSchema);
9292const customizationOptions = {}; // left it empty for simplicity, described below
9393const UserTC = composeWithMongoose (User, customizationOptions);
9494
95- // STEP 3: CREATE CRAZY GraphQL SCHEMA WITH ALL CRUD USER OPERATIONS
95+ // STEP 3: Add needed CRUD User operations to the GraphQL Schema
9696// via graphql-compose it will be much much easier, with less typing
97- schemaComposer .rootQuery () .addFields ({
97+ schemaComposer .Query .addFields ({
9898 userById: UserTC .getResolver (' findById' ),
9999 userByIds: UserTC .getResolver (' findByIds' ),
100100 userOne: UserTC .getResolver (' findOne' ),
@@ -104,7 +104,7 @@ schemaComposer.rootQuery().addFields({
104104 userPagination: UserTC .getResolver (' pagination' ),
105105});
106106
107- schemaComposer .rootMutation () .addFields ({
107+ schemaComposer .Mutation .addFields ({
108108 userCreate: UserTC .getResolver (' createOne' ),
109109 userUpdateById: UserTC .getResolver (' updateById' ),
110110 userUpdateOne: UserTC .getResolver (' updateOne' ),
@@ -123,71 +123,68 @@ I don't think so, because by default internally was created about 55 graphql typ
123123
124124
125125### Working with Mongoose Collection Level Discriminators
126- Variable Namings
127- * ` ...DTC ` - Suffix for a ` DiscriminatorTypeComposer ` instance, which is also an instance of ` TypeComposer ` . All fields and Relations manipulations on this instance affects all registered discriminators and the Discriminator Interface.
126+ Variable Namings
127+ * ` ...DTC ` - Suffix for a ` DiscriminatorTypeComposer ` instance, which is also an instance of ` TypeComposer ` . All fields and Relations manipulations on this instance affects all registered discriminators and the Discriminator Interface.
128128
129129``` js
130130 import mongoose from ' mongoose' ;
131- import { schemaComposer } from ' graphql-composer ' ;
131+ import { schemaComposer } from ' graphql-compose ' ;
132132 import { composeWithMongooseDiscriminators } from ' graphql-compose-mongoose' ;
133-
133+
134134 // pick a discriminatorKey
135135 const DKey = ' type' ;
136-
136+
137137 const enumCharacterType = {
138138 PERSON : ' Person' ,
139139 DROID : ' Droid' ,
140140 };
141-
141+
142142 // DEFINE BASE SCHEMA
143143 const CharacterSchema = new mongoose.Schema ({
144144 // _id: field...
145- name: String ,
146-
147145 type: {
148146 type: String ,
149147 require: true ,
150148 enum: (Object .keys (enumCharacterType): Array < string> ),
149+ description: ' Character type Droid or Person' ,
151150 },
152-
153- friends: [String ], // another Character
154- appearsIn: [String ], // movie
151+
152+ name: String ,
153+ height: Number ,
154+ mass: Number ,
155+ films: [String ],
155156 });
156-
157+
157158 // DEFINE DISCRIMINATOR SCHEMAS
158- const DroidSchema = new Schema ({
159- makeDate: Date ,
160- modelNumber: Number ,
159+ const DroidSchema = new mongoose.Schema ({
160+ makeDate: String ,
161161 primaryFunction: [String ],
162162 });
163-
164- const PersonSchema = new Schema ({
165- dob : Number ,
166- starShips : [ String ] ,
167- totalCredits : Number ,
163+
164+ const PersonSchema = new mongoose. Schema ({
165+ gender : String ,
166+ hairColor : String ,
167+ starships : [ String ] ,
168168 });
169-
169+
170170 // set discriminator Key
171171 CharacterSchema .set (' discriminatorKey' , DKey);
172-
172+
173173 // create base Model
174174 const CharacterModel = mongoose .model (' Character' , CharacterSchema);
175-
175+
176176 // create mongoose discriminator models
177177 const DroidModel = CharacterModel .discriminator (enumCharacterType .DROID , DroidSchema);
178178 const PersonModel = CharacterModel .discriminator (enumCharacterType .PERSON , PersonSchema);
179-
179+
180180 // create DiscriminatorTypeComposer
181- // discrimatorOptions
182- const baseOptions = {
183- customizationOptions: { // regular TypeConverterOptions, passed to composeWithMongoose
184- fields: {
185- remove: [' friends' ],
186- }
181+ const baseOptions = { // regular TypeConverterOptions, passed to composeWithMongoose
182+ fields: {
183+ remove: [' friends' ],
187184 }
188185 }
189186 const CharacterDTC = composeWithMongooseDiscriminators (CharacterModel, baseOptions);
190-
187+
191188 // create Discriminator Types
192189 const droidTypeConverterOptions = { // this options will be merged with baseOptions -> customisationsOptions
193190 fields: {
@@ -196,16 +193,16 @@ Variable Namings
196193 };
197194 const DroidTC = CharacterDTC .discriminator (DroidModel, droidTypeConverterOptions);
198195 const PersonTC = CharacterDTC .discriminator (PersonModel); // baseOptions -> customisationsOptions applied
199-
196+
200197 // You may now use CharacterDTC to add fields to all Discriminators
201198 // Use DroidTC, `PersonTC as any other TypeComposer.
202- schemaComposer .rootMutation () .addFields ({
199+ schemaComposer .Mutation .addFields ({
203200 droidCreate: DroidTC .getResolver (' createOne' ),
204201 personCreate: PersonTC .getResolver (' createOne' ),
205202 });
206-
203+
207204 const schema = schemaComposer .buildSchema ();
208-
205+
209206 describe (' createOne' , () => {
210207 it (' should create child document without specifying DKey' , async () => {
211208 const res = await graphql .graphql (
@@ -243,7 +240,7 @@ Variable Namings
243240 });
244241 });
245242 });
246- ```
243+ ```
247244
248245## FAQ
249246
@@ -396,7 +393,7 @@ The typical implementation may be like this:
396393// extend resolve params with hook
397394rp .beforeRecordMutate = async function (doc , rp ) {
398395 doc .userTouchedAt = new Date ();
399-
396+
400397 const canMakeUpdate = await performAsyncTask ( ... provide data from doc... )
401398 if (! canMakeUpdate) {
402399 throw new Error (' Forbidden!' );
@@ -427,7 +424,7 @@ function adminAccess(resolvers) {
427424
428425 // extend resolve params with hook
429426 rp .beforeRecordMutate = async function (doc , rp ) { ... }
430-
427+
431428 return next (rp)
432429 })
433430 })
@@ -588,4 +585,3 @@ This plugin adds `pagination` resolver.
588585
589586## License
590587[ MIT] ( https://github.com/graphql-compose/graphql-compose-mongoose/blob/master/LICENSE.md )
591-
0 commit comments