Skip to content

Commit 64100be

Browse files
author
Ryan Kotzen
committed
Merge branch 'develop'
2 parents ce50a3d + ba878c6 commit 64100be

2 files changed

Lines changed: 27 additions & 18 deletions

File tree

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"dependencies": {
3939
"acl": "0.4.9",
4040
"ajv": "4.9.0",
41-
"api-query-params": "4.1.0",
41+
"api-query-params": "4.2.0",
4242
"async": "2.1.2",
4343
"bcrypt": "0.8.7",
4444
"body-parser": "1.15.2",
@@ -66,7 +66,7 @@
6666
"password-generator": "2.0.2",
6767
"pluralize": "3.0.0",
6868
"request-id": "0.11.0",
69-
"snyk": "1.19.1",
69+
"snyk": "1.20.0",
7070
"swagger-spec-express": "1.0.7",
7171
"winston": "2.3.0",
7272
"winston-daily-rotate-file": "1.3.1",
@@ -89,4 +89,4 @@
8989
"swagger-ui": "2.2.6"
9090
},
9191
"snyk": true
92-
}
92+
}

src/mongo/crud.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ function query(metadata) {
4242
}
4343

4444
function parseQueryWithDefaults(queryString) {
45-
var parsedQuery = aqp(queryString);
45+
var agpOptions = {
46+
casters: {
47+
mongoId: val => mongo.ObjectId(val)
48+
},
49+
castParams: {
50+
_id: 'mongoId'
51+
}
52+
};
53+
var parsedQuery = aqp(queryString, agpOptions);
4654
if (_.isObject(queryString)) {
4755
coerceTypes(queryString, parsedQuery.filter);
4856
}
@@ -60,7 +68,6 @@ function coerceTypes(inputObject, filter) {
6068
}
6169
if (inputObject[key] instanceof mongo.ObjectId) {
6270
filter[key] = mongo.ObjectId(filter[key]);
63-
return;
6471
}
6572
});
6673
}
@@ -72,12 +79,10 @@ function findByIdentifier(metadata) {
7279
return next(new Error("Object has no identifier"));
7380
}
7481
var mongoQuery = getIdentifierQuery(identifier, metadata);
75-
if (Object.keys(req.query).length > 0) {
76-
var parsedQuery = parseQueryWithDefaults(req.query);
77-
mongoQuery = _.merge({}, parsedQuery.filter, mongoQuery);
78-
}
82+
mongoQuery = _.merge({}, req.query, mongoQuery);
83+
var parsedQuery = parseQueryWithDefaults(mongoQuery);
7984
mongo.db.collection(metadata.collectionName)
80-
.findOne(mongoQuery, dataRetrieved);
85+
.findOne(parsedQuery.filter, dataRetrieved);
8186

8287
function dataRetrieved(err, document) {
8388
if (err) {
@@ -94,7 +99,7 @@ function findByIdentifier(metadata) {
9499

95100
function getIdentifierQuery(identifier, metadata) {
96101
if (mongo.isValidObjectId(identifier)) {
97-
return {_id: mongo.ObjectId(identifier)};
102+
return {_id: identifier};
98103
}
99104
var identifierQuery = {};
100105
identifierQuery[metadata.identifierName] = identifier;
@@ -117,7 +122,7 @@ function updateStatus(metadata) {
117122
if (_.isNil(identifier)) {
118123
return next(new Error("Object has no identifier"));
119124
}
120-
var filter = getIdentifierQuery(identifier, metadata);
125+
var mongoQuery = getIdentifierQuery(identifier, metadata);
121126
var now = moment.utc().toDate();
122127
var updateStatement = {
123128
$set: {
@@ -136,8 +141,9 @@ function updateStatus(metadata) {
136141
var options = {
137142
returnOriginal: true
138143
};
144+
var parsedQuery = parseQueryWithDefaults(mongoQuery);
139145
mongo.db.collection(metadata.collectionName)
140-
.findOneAndUpdate(filter, updateStatement, options, updateComplete);
146+
.findOneAndUpdate(parsedQuery.filter, updateStatement, options, updateComplete);
141147
function updateComplete(err, result) {
142148
if (err) {
143149
return next();
@@ -154,13 +160,14 @@ function update(metadata) {
154160
if (_.isNil(identifier)) {
155161
return next(new Error("Object has no identifier"));
156162
}
157-
var filter = getIdentifierQuery(identifier, metadata);
163+
var mongoQuery = getIdentifierQuery(identifier, metadata);
158164
var replacement = req.body;
159165
var options = {
160166
returnOriginal: true
161167
};
168+
var parsedQuery = parseQueryWithDefaults(mongoQuery);
162169
mongo.db.collection(metadata.collectionName)
163-
.findOneAndReplace(filter, replacement, options, updateComplete);
170+
.findOneAndReplace(parsedQuery.filter, replacement, options, updateComplete);
164171
function updateComplete(err, result) {
165172
if (err) {
166173
return next();
@@ -188,15 +195,16 @@ function getExistingMetadata(metadata) {
188195
if (_.isNil(identifier)) {
189196
return next(new Error("Object has no identifier"));
190197
}
191-
var filter = getIdentifierQuery(identifier, metadata);
198+
var mongoQuery = getIdentifierQuery(identifier, metadata);
192199
var options = {
193200
fields: {}
194201
};
195202
metadataFields.forEach(function (field) {
196203
options.fields[field] = 1;
197204
});
205+
var parsedQuery = parseQueryWithDefaults(mongoQuery);
198206
mongo.db.collection(metadata.collectionName)
199-
.findOne(filter, options, dataRetrieved);
207+
.findOne(parsedQuery.filter, options, dataRetrieved);
200208
function dataRetrieved(err, document) {
201209
if (err) {
202210
return next(err);
@@ -224,8 +232,9 @@ function deleteByIdentifier(metadata) {
224232
return next(new Error("Object has no identifier"));
225233
}
226234
var mongoQuery = getIdentifierQuery(identifier, metadata);
235+
var parsedQuery = parseQueryWithDefaults(mongoQuery);
227236
mongo.db.collection(metadata.collectionName)
228-
.deleteOne(mongoQuery, documentDeleted);
237+
.deleteOne(parsedQuery.filter, documentDeleted);
229238

230239
function documentDeleted(err, result) {
231240
if (err) {

0 commit comments

Comments
 (0)