Source: stripper.service.js

/**
 *  @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,
};