UNPKG

@icodebible/utils

Version:

Collection of essential utilities that help manipulation and transformation of various js object.

276 lines (269 loc) 4.17 kB
/** * */ const _ = require('lodash'); /** * */ const { isArray, isObject } = require('../../helpers'); const { SplitWordByCamelCase } = require('../split-by-camelcase'); /** * */ exports.GetResponseSanitizer = async ( repositoryInstance, payloads, entityMapper ) => { /** * */ const mForms = []; if (payloads && isArray(payloads)) { /** * */ for (const payload of await payloads) { /** * */ let oPayload = _.create(); /** * */ if (payload) { /** * */ for (const key of await _.keys(payload)) { /** * */ if (key) { /** * */ if ( _.has(payload, key) && payload[key] && isArray(payload[key]) ) { /** * */ oPayload = { ...oPayload, [key]: await getEntityResponseData( repositoryInstance, payload[key], entityMapper, key ), }; } else if ( /** * */ _.has(payload, key) && payload[key] && isObject(payload[key]) ) { /** * */ oPayload = { ...oPayload, [key]: payload[key], }; } else { /** * */ oPayload = { ...oPayload, [key]: payload[key], }; } } } /** * */ mForms.push(oPayload); } } /** * */ return mForms; } else { /** * Return message no payload passed to be sanitized */ return 'No payload supplied'; } }; /** * * @param payload * @param key */ getEntityResponseData = async ( repositoryInstance, payloads, entityMapper, key ) => { /** * */ const idendityChecker = ['id', 'uid']; const mFormFieldMembers = []; /** * */ if (repositoryInstance && payloads && isArray(payloads) && entityMapper) { /** * */ for (const payload of await payloads) { /** * */ let subPayload = _.create(); /** * */ if (payload) { /** * */ for (const key of await _.keys(payload)) { /** * */ if (key) { /** * */ if ( key && _.endsWith(key, 'id') && !_.includes( idendityChecker, _.toLower(_.trim(key)) ) ) { /** * */ const entityReferenceIdProp = key; /** * */ const replacable = _.replace( _.clone(entityReferenceIdProp), 'id', 'Id' ); /** * */ const arrWord = SplitWordByCamelCase( replacable ); /** * */ if ( _.isEqual(_.last(arrWord), 'Id') ) { /** * */ const queryKey = _.toLower( _.head(arrWord) ); const UIDdWrapper = await IDToUIDResolver( payload[key], repositoryInstance, entityMapper[queryKey] ); subPayload = _.has(payload, key) && _.has(UIDdWrapper, 'uid') ? { ...subPayload, [key]: UIDdWrapper.uid, } : { ...subPayload }; } } else { /** * */ subPayload = { ...subPayload, [key]: payload[key], }; } } } /** * */ mFormFieldMembers.push(subPayload); } } /** * */ return mFormFieldMembers; } }; /** * */ IDToUIDResolver = async (id, repositoryInstance, tablename) => { /** * */ const query = `SELECT * FROM public.${tablename} WHERE id = '${id}' LIMIT 1`; /** * */ const queryResults = await repositoryInstance.query(query); /** * */ return queryResults.length >= 1 ? await getEntityRelationUIDProps(queryResults) : {}; }; /** * */ getEntityRelationUIDProps = (queryResults) => { /** * */ return _.head( _.map(queryResults, (result) => { /** * */ if (result) { /** * */ return _.pickBy(result, (value, key) => { /** * */ return key === 'uid'; }); } }) ); };