stonecircle/express-autoroute-json

View on GitHub
lib/findOne.js

Summary

Maintainability
B
6 hrs
Test Coverage
B
86%
const _ = require('lodash');
 
var defaultSerialise = require('./serialise');
 
Function `exports` has 44 lines of code (exceeds 25 allowed). Consider refactoring.
Function `exports` has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.
module.exports = function(options) {
return function(req, res, next) {
Identical blocks of code found in 3 locations. Consider refactoring.
return new Promise(function(resolve) {
if (options.translateId) {
return resolve(options.translateId(req.params.id, req));
}
 
return resolve(req.params.id);
})
 
.then(function(id) {
var queryObject = req.autorouteQuery || {};
 
if (options.idParameter || options.find.idParameter) {
queryObject[options.idParameter || options.find.idParameter] = id;
} else {
queryObject._id = new options.model.base.Types.ObjectId(id);
}
 
var query = options.model.findOne(queryObject);
 
if (options.find.populate) {
query.populate(options.find.populate);
}
 
return query.exec();
})
 
.then(function(result) {
if (!result) {
return res.status(404).send();
}
 
Similar blocks of code found in 2 locations. Consider refactoring.
return new Promise(function(resolve) {
if (options.translateId) {
// reverse translate id
return resolve(_.assign(result.toJSON(), { id: req.params.id, originalId: result.id }));
}
 
return resolve(result);
}).then((translatedIdResult) => {
if (options.find.processOne) {
return Promise.resolve(options.find.processOne(translatedIdResult, req));
}
 
return translatedIdResult;
}).then(function(processedResult) {
var serialiseFunction = _.get(options, 'find.serialise', defaultSerialise);
 
res.json(serialiseFunction(processedResult, options, defaultSerialise));
});
})
 
.then(null, function(err) {
// eslint-disable-next-line no-console
console.log(err);
return next(err);
});
};
};