tuain-ecosystem-lib
Version:
Servicio de gestión mensajería instantanea de la plataforma Tuain
105 lines (94 loc) • 2.92 kB
JavaScript
const { ObjectId } = require('mongodb');
function findByName(name) {
return { name };
}
function findById(id) {
return { _id: ObjectId(`${id}`) };
}
function findByAttributes(objConstraints, searchFields) {
let findQuery = {};
/**
* recordsNumber, pageNumber, includeTotalRows
* ordering: [field, order]
* simpleFilter: ['', '']
* filtersByValue:[{ field, operator, value}]
*/
if (objConstraints && objConstraints.simpleFilter) {
const textToFind = objConstraints.simpleFilter[0];
const queryRestrictions = [];
searchFields.forEach((searchField) => {
const fieldQuery = {};
fieldQuery[searchField] = { $regex: textToFind };
queryRestrictions.push(fieldQuery);
});
findQuery = { $or: queryRestrictions };
} else if (objConstraints && objConstraints.filtersByValue) {
objConstraints.filtersByValue.forEach((fieldFilter) => {
const { field, operator, value } = fieldFilter;
if (searchFields.includes(field)) {
if (operator === '==') {
findQuery[field] = value;
}
}
});
}
return findQuery;
}
function updateObj(appData) {
const querySet = { ...appData };
Object.entries(querySet).forEach(([key, val]) => {
if (val === null || val === undefined) {
delete querySet[key];
}
});
if (querySet.additionalData) {
Object.entries(querySet.additionalData).forEach(([key, val]) => {
if (val === null || val === undefined) {
return;
}
if (Array.isArray(val) || typeof val !== 'object' || Object.keys(val).length === 0) {
querySet[`additionalData.${key}`] = val;
} else if (typeof val === 'object' && Object.keys(val)?.length > 0) {
Object.entries(val).forEach(([key2, val2]) => {
querySet[`additionalData.${key}.${key2}`] = val2;
});
}
});
delete querySet.additionalData;
}
return { $set: { ...querySet } };
}
function addExternalRef(objectData) {
return { $push: { externalCoding: { ...objectData } } };
}
function findByExternalRef(externalSource, externalCode, externalReference = null) {
const query = { externalCoding: { externalSource, externalCode } };
if (externalReference) {
query.externalCoding.externalReference = externalReference;
}
return query;
}
function removeExternalRef(externalSource, externalReference = null) {
const query = { externalCoding: { externalSource } };
if (externalReference) {
query.externalCoding.externalReference = externalReference;
}
return { $pull: query };
}
function addToArray(arrayName, data) {
return { $addToSet: { [arrayName]: data } };
}
function removeFromArray(arrayName, identifier) {
return { $pull: { [arrayName]: identifier } };
}
module.exports = {
findByName,
findById,
updateObj,
findByAttributes,
addExternalRef,
findByExternalRef,
removeExternalRef,
addToArray,
removeFromArray,
};