Skip to content

Commit 7acdfca

Browse files
committed
feat(FilterHelper): Add resolveParams.rawQuery to mongoose.where() if provided
rawQuery allows you pass additional query params to mongoose.where clause. rawQuery can be created manually or via graphql-compose Resolver.addFilterArg(). More details here graphql-compose/graphql-compose#22
1 parent 325fd17 commit 7acdfca

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/resolvers/helpers/__tests__/filter-test.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,11 +167,16 @@ describe('Resolver helper `filter` ->', () => {
167167

168168
describe('filterHelper()', () => {
169169
let spyWhereFn;
170+
let spyWhere2Fn;
170171
let spyFindFn;
171172
let resolveParams;
172173

173174
beforeEach(() => {
174-
spyWhereFn = spy();
175+
spyWhereFn = spy((queryObj) => {
176+
spyWhere2Fn = spy();
177+
return { where: spyWhere2Fn };
178+
});
179+
175180
spyFindFn = spy();
176181
resolveParams = {
177182
query: {
@@ -217,9 +222,29 @@ describe('Resolver helper `filter` ->', () => {
217222
},
218223
};
219224
filterHelper(resolveParams);
220-
expect(spyFindFn).to.have.been.called.with(
225+
expect(spyWhereFn).to.have.been.called.with(
221226
{ age: { $gt: 10, $lt: 20 } }
222227
);
223228
});
229+
230+
it('should add rawQuery to query', () => {
231+
resolveParams.args = {
232+
filter: {
233+
[OPERATORS_FIELDNAME]: { age: { gt: 10, lt: 20 } },
234+
},
235+
};
236+
resolveParams.rawQuery = {
237+
age: { max: 30 },
238+
active: true,
239+
};
240+
241+
filterHelper(resolveParams);
242+
expect(spyWhereFn).to.have.been.called.with(
243+
{ age: { $gt: 10, $lt: 20 } }
244+
);
245+
expect(spyWhere2Fn).to.have.been.called.with(
246+
{ age: { max: 30 }, active: true }
247+
);
248+
});
224249
});
225250
});

src/resolvers/helpers/filter.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from 'graphql';
1010
import { TypeComposer, InputTypeComposer } from 'graphql-compose';
1111
import getIndexesFromModel from '../../utils/getIndexesFromModel';
12+
import { isObject } from '../../utils/is';
1213
import { toDottedObject, upperFirst } from '../../utils';
1314
import typeStorage from '../../typeStorage';
1415
import type {
@@ -115,14 +116,20 @@ export function filterHelper(resolveParams: ExtendedResolveParams): void {
115116
criteria[`$${operatorName}`] = fieldOperators[operatorName];
116117
});
117118
if (Object.keys(criteria).length > 0) {
118-
// $FlowFixMe
119-
resolveParams.query = resolveParams.query.find({ // eslint-disable-line
119+
resolveParams.query = resolveParams.query.where({ // eslint-disable-line
120120
[fieldName]: criteria,
121121
});
122122
}
123123
});
124124
}
125125
}
126+
127+
if (isObject(resolveParams.rawQuery)) {
128+
resolveParams.query = resolveParams.query.where( // eslint-disable-line
129+
// $FlowFixMe
130+
resolveParams.rawQuery
131+
);
132+
}
126133
}
127134

128135
export function getIndexedFieldNames(model: MongooseModelT): string[] {

0 commit comments

Comments
 (0)