Skip to content

Commit b668121

Browse files
israelglarnodkz
authored andcommitted
fix: required fields only apply to Create resolvers
* Fix: required fields only apply to Create resolvers * Fix: type error
1 parent 61a9f41 commit b668121

File tree

5 files changed

+25
-27
lines changed

5 files changed

+25
-27
lines changed

src/__mocks__/userModel.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,3 @@ UserSchema.virtual('nameVirtual').get(function() {
111111
const UserModel = mongoose.model('User', UserSchema);
112112

113113
export { UserSchema, UserModel };
114-
115-
const UserRequiredSchema: SchemaType<any> = new Schema({
116-
name: {
117-
type: String,
118-
description: 'Person name',
119-
required: true,
120-
},
121-
});
122-
123-
const UserRequiredModel = mongoose.model('UserRequired', UserRequiredSchema);
124-
125-
export { UserRequiredSchema, UserRequiredModel };

src/__tests__/fieldConverter-test.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint-disable no-unused-expressions, no-template-curly-in-string */
33

44
import { EnumTypeComposer, schemaComposer } from 'graphql-compose';
5-
import { UserModel, UserRequiredModel } from '../__mocks__/userModel';
5+
import { UserModel } from '../__mocks__/userModel';
66
import {
77
deriveComplexType,
88
getFieldsFromModel,
@@ -14,7 +14,6 @@ import {
1414
enumToGraphQL,
1515
documentArrayToGraphQL,
1616
referenceToGraphQL,
17-
convertModelToGraphQL,
1817
} from '../fieldsConverter';
1918
import GraphQLMongoID from '../types/mongoid';
2019

@@ -109,13 +108,6 @@ describe('fieldConverter', () => {
109108
});
110109
});
111110

112-
describe('convertFieldToGraphQL()', () => {
113-
it('should set required field', () => {
114-
const tc = convertModelToGraphQL(UserRequiredModel, 'UserRequired', schemaComposer);
115-
expect(tc.isFieldNonNull('name')).toBeTruthy();
116-
});
117-
});
118-
119111
describe('convertFieldToGraphQL()', () => {
120112
it('should convert any mongoose field to graphQL type', () => {
121113
const mongooseField = {

src/fieldsConverter.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ export function convertModelToGraphQL(
127127
return schemaComposer.getTC(model.schema);
128128
}
129129

130-
const requiredFields = [];
131130
const typeComposer = schemaComposer.getOrCreateTC(typeName);
132131
// $FlowFixMe await landing [email protected] or above
133132
schemaComposer.set(model.schema, typeComposer);
@@ -139,10 +138,6 @@ export function convertModelToGraphQL(
139138
Object.keys(mongooseFields).forEach(fieldName => {
140139
const mongooseField: MongooseFieldT = mongooseFields[fieldName];
141140

142-
if (mongooseField.isRequired) {
143-
requiredFields.push(fieldName);
144-
}
145-
146141
graphqlFields[fieldName] = {
147142
type: convertFieldToGraphQL(mongooseField, typeName, schemaComposer),
148143
description: _getFieldDescription(mongooseField),
@@ -164,7 +159,6 @@ export function convertModelToGraphQL(
164159
});
165160

166161
typeComposer.addFields(graphqlFields);
167-
requiredFields.map(f => typeComposer.makeFieldNonNull(f));
168162
return typeComposer;
169163
}
170164

src/resolvers/createMany.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ export default function createMany(
3535
throw new Error('Second arg for Resolver createMany() should be instance of TypeComposer.');
3636
}
3737

38+
const tree = model.schema.obj;
39+
const requiredFields = [];
40+
for (const field in tree) {
41+
if (tree.hasOwnProperty(field)) {
42+
const fieldOptions = tree[field];
43+
if (fieldOptions.required) {
44+
requiredFields.push(field);
45+
}
46+
}
47+
}
48+
3849
const outputTypeName = `CreateMany${tc.getTypeName()}Payload`;
3950
const outputType = tc.constructor.schemaComposer.getOrCreateTC(outputTypeName, t => {
4051
t.addFields({
@@ -66,6 +77,7 @@ export default function createMany(
6677
recordTypeName: `CreateMany${tc.getTypeName()}Input`,
6778
removeFields: ['id', '_id'],
6879
isRequired: true,
80+
requiredFields,
6981
...(opts && opts.records),
7082
}).record: any).type
7183
)

src/resolvers/createOne.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ export default function createOne(
1919
throw new Error('Second arg for Resolver createOne() should be instance of TypeComposer.');
2020
}
2121

22+
const tree = model.schema.obj;
23+
const requiredFields = [];
24+
for (const field in tree) {
25+
if (tree.hasOwnProperty(field)) {
26+
const fieldOptions = tree[field];
27+
if (fieldOptions.required) {
28+
requiredFields.push(field);
29+
}
30+
}
31+
}
32+
2233
const outputTypeName = `CreateOne${tc.getTypeName()}Payload`;
2334
const outputType = tc.constructor.schemaComposer.getOrCreateTC(outputTypeName, t => {
2435
t.addFields({
@@ -43,6 +54,7 @@ export default function createOne(
4354
recordTypeName: `CreateOne${tc.getTypeName()}Input`,
4455
removeFields: ['id', '_id'],
4556
isRequired: true,
57+
requiredFields,
4658
...(opts && opts.record),
4759
}),
4860
},

0 commit comments

Comments
 (0)