Skip to content

Commit 0c9267b

Browse files
authored
Merge pull request #55 from leojpod/slighly-more-advance-filtering
Slighly more advance filtering
2 parents 01db9af + 4eaefaa commit 0c9267b

File tree

4 files changed

+1332
-1246
lines changed

4 files changed

+1332
-1246
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: node_js
22
node_js:
3-
- "6"
3+
- "12"
44
before_script:
55
- npm install -g mocha
66
- cd ./tests/dummy && npm install && cd ../../

lib/api/blueprints/find.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Module dependencies
33
*/
4-
var actionUtil = require('./_util/actionUtil');
4+
var actionUtil = require("./_util/actionUtil");
55
/**
66
* Find Records
77
*
@@ -13,21 +13,34 @@ var actionUtil = require('./_util/actionUtil');
1313
*/
1414

1515
module.exports = function findRecords(req, res) {
16-
1716
// Look up the model
18-
var Model = actionUtil.parseModel(req);
17+
let Model = actionUtil.parseModel(req);
1918

2019
// Lookup for records that match the specified criteria
2120

22-
var queryParams = JsonApiService.deserialize(req.query.filter) || null;
23-
24-
var query = Model.find(queryParams);
21+
let queryParams = JsonApiService.deserialize(req.query.filter) || null;
22+
23+
if (queryParams) {
24+
// This allows to more advance filtering things like '?filter[date]={"<":"YYYY-MM-DD"}'
25+
let params = Object.entries(queryParams).map(([key, value]) => {
26+
try {
27+
let val = JSON.parse(value);
28+
return [key, val];
29+
} catch (err) {
30+
return [key, value];
31+
}
32+
});
33+
queryParams = params.reduce(
34+
(qp, [key, value]) => ({ ...qp, [key]: value }),
35+
{}
36+
);
37+
}
38+
let query = Model.find(queryParams);
2539

2640
// populate as required
2741
actionUtil.populateEach(req, query);
2842

2943
query.exec((err, matchingRecords) => {
30-
3144
if (err) return res.serverError(err);
3245

3346
return res.ok(matchingRecords);

0 commit comments

Comments
 (0)