@icodebible/utils
Version:
Collection of essential utilities that help manipulation and transformation of various js object.
276 lines (269 loc) • 4.17 kB
JavaScript
/**
*
*/
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,
[]: await getEntityResponseData(
repositoryInstance,
payload[key],
entityMapper,
key
),
};
} else if (
/**
*
*/
_.has(payload, key) &&
payload[key] &&
isObject(payload[key])
) {
/**
*
*/
oPayload = {
...oPayload,
[]: payload[key],
};
} else {
/**
*
*/
oPayload = {
...oPayload,
[]: 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,
[]:
UIDdWrapper.uid,
}
: { ...subPayload };
}
} else {
/**
*
*/
subPayload = {
...subPayload,
[]: 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';
});
}
})
);
};