tuain-ecosystem-lib
Version:
Servicio de gestión mensajería instantanea de la plataforma Tuain
71 lines (64 loc) • 1.92 kB
JavaScript
const { ObjectId } = require('mongodb');
const common = require('./common');
function findStoreDevices(storeId, deviceId = null) {
const deviceQuery = { storeId: ObjectId(storeId) };
if (deviceId) {
Object.assign(deviceQuery, common.findById(deviceId));
}
return deviceQuery;
}
function findDevice(deviceId) {
return { ...common.findById(deviceId) };
}
function findDevices(deviceIds, storeIds, state, deviceData) {
const query = {};
if (Array.isArray(deviceIds)) {
const deviceIdsObj = deviceIds.map(item => ObjectId(item));
Object.assign(query, { _id: { $in: deviceIdsObj } });
}
if (Array.isArray(storeIds)) {
const storeIdsObj = storeIds.map(item => ObjectId(item));
Object.assign(query, { storeId: { $in: storeIdsObj } });
}
state && (query.state = state);
if (deviceData) {
Object.entries(deviceData).forEach(([attrName, attrValue]) => {
const attributeName = `deviceData.${attrName}`;
if (attrValue) {
query[attributeName] = attrValue;
}
});
}
return query;
}
function addExternalRefAttribute(deviceId, externalSource, externalDetail) {
const setObject = {};
// eslint-disable-next-line no-restricted-syntax
for (const [key, value] of Object.entries(externalDetail)) {
const setKey = `externalCoding.$.externalDetail.${key}`;
setObject[setKey] = value;
}
return [{
_id: ObjectId(deviceId),
externalCoding: { $elemMatch: { externalSource } },
},
{ $set: setObject },
];
}
function deleteExternalRefAttribute(deviceId, externalSource, externalDetail) {
return [{
_id: ObjectId(deviceId),
externalCoding: { $elemMatch: { externalSource } },
},
{ $unset: { [`externalCoding.$.externalDetail.${externalDetail}`]: '' } },
];
}
module.exports = {
...common,
ObjectId,
findDevice,
findDevices,
addExternalRefAttribute,
deleteExternalRefAttribute,
findStoreDevices,
};