node-rigorous
Version:
Rigorous Framework
45 lines (31 loc) • 1.43 kB
JavaScript
const mongoose = require('mongoose');
const RigorousError = require('../../../facades/RigorousError');
const errorsMessages = require('../../../etc/errorsMessages');
const patch = require('./patch');
const helper_format_checker = require('../../../helpers/format_checker');
/**
* params.virtualReturnedFields = [{ path: 'owner', select: { xx: 1, yy: 1 } }]
*/
module.exports = async (modelName, query, params) => {
try {
if (helper_format_checker.isNil(params)) {
throw new RigorousError(errorsMessages.OperationError.ParametersMissing);
}
if (helper_format_checker.isNil(params.selectAttributesReturned) && helper_format_checker.isObjectEmpty(params.selectAttributesReturned)) {
throw new RigorousError(errorsMessages.OperationError);
}
const { selectAttributesReturned } = params;
const { virtualReturnedFields } = params;
const op = mongoose.model(modelName)
.findOne(query)
.select(selectAttributesReturned);
if (virtualReturnedFields) {
virtualReturnedFields.forEach((virtualFieldReturned) => { op.populate(virtualFieldReturned); });
}
const resultOne = await op.exec();
const resultJson = patch.leanWithId(resultOne);
return resultJson;
} catch (errGlobal) {
throw new RigorousError(errorsMessages.OperationError, errGlobal);
}
};