Skip to content

Commit 9ac7822

Browse files
committed
tune args generator for filter helper
1 parent 280a89e commit 9ac7822

File tree

6 files changed

+42
-20
lines changed

6 files changed

+42
-20
lines changed

src/resolvers/findMany.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ import { sortHelperArgsGen, sortHelper } from './helpers/sort';
1919
import { projectionHelper } from './helpers/projection';
2020

2121
export default function findMany(model: MongooseModelT, gqType: GraphQLObjectType): Resolver {
22-
const filterHelperArgs = filterHelperArgsGen();
23-
2422
return new Resolver({
2523
outputType: new GraphQLList(gqType),
2624
name: 'findMany',
2725
kind: 'query',
2826
args: {
29-
...filterHelperArgs,
27+
...filterHelperArgsGen(model, {
28+
filterTypeName: `Filter${gqType.name}Input`,
29+
}),
3030
...skipHelperArgs,
3131
...limitHelperArgs,
3232
...sortHelperArgsGen(model, {

src/resolvers/findOne.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ export default function findOne(
2323
name: 'findOne',
2424
kind: 'query',
2525
args: {
26-
...filterHelperArgsGen(),
26+
...filterHelperArgsGen(model, {
27+
filterTypeName: `Filter${gqType.name}Input`,
28+
}),
2729
...skipHelperArgs,
2830
...sortHelperArgsGen(model, {
2931
sortTypeName: `Sort${gqType.name}Input`,

src/resolvers/helpers/filter.js

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,39 @@
11
/* @flow */
22

3-
import { GraphQLInt, GraphQLInputObjectType } from 'graphql/type';
3+
import { GraphQLInt, GraphQLInputObjectType, GraphQLNonNull } from 'graphql/type';
44
import { toDottedObject } from '../../utils';
55
import type {
66
GraphQLFieldConfigArgumentMap,
77
ExtendedResolveParams,
88
} from '../../definition';
99

10-
export const filterHelperArgsGen = (): GraphQLFieldConfigArgumentMap => {
10+
export type filterHelperArgsGenOpts = {
11+
filterTypeName: string,
12+
isRequired?: boolean,
13+
};
14+
15+
export const filterHelperArgsGen = (
16+
model: MongooseModelT,
17+
opts: filterHelperArgsGenOpts,
18+
): GraphQLFieldConfigArgumentMap => {
19+
if (!opts.filterTypeName) {
20+
throw new Error('You should provide `filterTypeName` in options.');
21+
}
22+
23+
const filterType = new GraphQLInputObjectType({
24+
name: opts.filterTypeName,
25+
fields: {
26+
age: {
27+
name: 'age',
28+
type: GraphQLInt, // TODO just mock, should be changed in future
29+
},
30+
},
31+
});
32+
1133
return {
1234
filter: {
1335
name: 'filter',
14-
type: new GraphQLInputObjectType({
15-
name: 'InputFilterSomeName',
16-
fields: {
17-
age: {
18-
name: 'age',
19-
type: GraphQLInt, // TODO just mock, should be changed in future
20-
},
21-
},
22-
}),
36+
type: opts.isRequired ? new GraphQLNonNull(filterType): filterType,
2337
description: 'Filter by indexed fields',
2438
},
2539
};

src/resolvers/removeOne.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22
/* eslint-disable no-param-reassign */
33

4-
import { GraphQLObjectType } from 'graphql';
4+
import { GraphQLObjectType, GraphQLNonNull } from 'graphql';
55
import GraphQLMongoID from '../types/mongoid';
66

77
import { skipHelperArgs, skipHelper } from './helpers/skip';
@@ -39,7 +39,9 @@ export default function removeOne(
3939
},
4040
}),
4141
args: {
42-
...filterHelperArgsGen(),
42+
...filterHelperArgsGen(model, {
43+
filterTypeName: `Filter${gqType.name}Input`,
44+
}),
4345
...sortHelperArgsGen(model, {
4446
sortTypeName: `Sort${gqType.name}Input`,
4547
}),

src/resolvers/updateMany.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ export default function updateMany(
3838
inputTypeName: `UpdateMany${gqType.name}Input`,
3939
removeFields: ['id', '_id'],
4040
}),
41-
...filterHelperArgsGen(),
41+
...filterHelperArgsGen(model, {
42+
filterTypeName: `Filter${gqType.name}Input`,
43+
}),
4244
...sortHelperArgsGen(model, {
4345
sortTypeName: `Sort${gqType.name}Input`,
4446
}),
@@ -63,7 +65,7 @@ export default function updateMany(
6365
limitHelper(resolveParams);
6466

6567
resolveParams.query = resolveParams.query.setOptions({ multi: true }); // eslint-disable-line
66-
resolveParams.query.update({ $set: inputData });
68+
resolveParams.query.update({ $set: toDottedObject(inputData) });
6769

6870
return resolveParams.query
6971
.exec()

src/resolvers/updateOne.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ export default function updateOne(
4646
inputTypeName: `UpdateOne${gqType.name}Input`,
4747
removeFields: ['id', '_id'],
4848
}),
49-
...filterHelperArgsGen(),
49+
...filterHelperArgsGen(model, {
50+
filterTypeName: `Filter${gqType.name}Input`,
51+
}),
5052
...sortHelperArgsGen(model, {
5153
sortTypeName: `Sort${gqType.name}Input`,
5254
}),

0 commit comments

Comments
 (0)