/**
* @fileOverview A service that handles cleanup operations on objects called
*
* @author Ralfs Lagzda
*
* @requires NPM:lodash
*/
const _ = require('lodash');
/**
* Strip irrelevant or even sensitive information
*
* @memberOf StripperService
* @function defaultStrip
* @param {Object} modelObject the object to strip the default properties from
* @returns {Promise<Object>} eventually strips and resolves the object or throws error
*/
const defaultStrip = modelObject => new Promise(async (resolve, reject) => {
try {
if (typeof (modelObject) !== 'object') throw (Error('Invalid parameters'));
resolve(_.omit(modelObject, ['createdBy', '__v']));
} catch (err) {
reject(err);
}
});
/**
* Build a request query body that conforms to the protocol
*
* @memberOf StripperService
* @function buildDefaultQuery
* @param {Object} queryObject the query object to build upon
* @returns {Promise<Object>}
* eventually builds and resoles the query object or throws error
*/
const buildDefaultQuery = (userId, queryObject) => new Promise(async (resolve, reject) => {
try {
let newQueryObject = _.omit(queryObject, ['createdBy', '__v', '_id']);
const paramMap = { createdBy: userId };
if (queryObject.name) paramMap.name = new RegExp(`${queryObject.name}`, 'i');
if (queryObject.telephone) paramMap.telephone = new RegExp(`${queryObject.telephone}`, 'i');
newQueryObject = await Object.assign(newQueryObject, paramMap);
resolve(newQueryObject);
} catch (err) {
reject(err);
}
});
/**
* A service that handles cleanup operations on objects called
* @namespace StripperService
*/
module.exports = {
defaultStrip,
buildDefaultQuery,
};