master^2
Bhaskar 6 months ago
parent 7e0ed9efce
commit 82b3364520

@ -1000,14 +1000,12 @@ exports.getMasterSlaveSummary = async (req, reply) => {
return reply.status(400).send({ message: "Missing customerId" }); return reply.status(400).send({ message: "Missing customerId" });
} }
// Get all devices for customer
const allDevices = await Insensors.find({ customerId }); const allDevices = await Insensors.find({ customerId });
// Separate masters and slaves
const masters = allDevices.filter(device => device.type === 'master'); const masters = allDevices.filter(device => device.type === 'master');
const slaves = allDevices.filter(device => device.type === 'slave'); const slaves = allDevices.filter(device => device.type === 'slave');
// Update connected_status for each sensor // Update connection status and timestamps
const updateStatusPromises = allDevices.map(async device => { const updateStatusPromises = allDevices.map(async device => {
const hwId = device.connected_to; const hwId = device.connected_to;
if (!hwId) return; if (!hwId) return;
@ -1017,11 +1015,13 @@ exports.getMasterSlaveSummary = async (req, reply) => {
.lean(); .lean();
let status = "disconnected"; let status = "disconnected";
let updateFields = {};
if (latestData?.date) { if (latestData?.date) {
const now = moment(); const now = moment();
const lastSeen = moment(latestData.date); const lastSeen = moment(latestData.date);
const diff = now.diff(lastSeen, 'minutes'); const diff = now.diff(lastSeen, 'minutes');
if (diff <= 10) { if (diff <= 10) {
status = "connected"; status = "connected";
@ -1030,46 +1030,47 @@ exports.getMasterSlaveSummary = async (req, reply) => {
const time = dateObj.toTimeString().split(" ")[0]; const time = dateObj.toTimeString().split(" ")[0];
if (device.type === 'master') { if (device.type === 'master') {
updateFields.connected_gsm_date = date;
updateFields.connected_gsm_time = time;
device.connected_gsm_date = date; device.connected_gsm_date = date;
device.connected_gsm_time = time; device.connected_gsm_time = time;
} }
if (device.type === 'slave') { if (device.type === 'slave') {
updateFields.connected_lora_date = date;
updateFields.connected_lora_time = time;
device.connected_lora_date = date; device.connected_lora_date = date;
device.connected_lora_time = time; device.connected_lora_time = time;
} }
} }
} }
await Insensors.updateOne( updateFields.connected_status = status;
{ _id: device._id }, await Insensors.updateOne({ _id: device._id }, { $set: updateFields });
{ $set: { connected_status: status } }
);
device.connected_status = status; device.connected_status = status;
}); });
await Promise.all(updateStatusPromises); await Promise.all(updateStatusPromises);
// Map masters to their connected slaves // Build enriched masters and exclude irrelevant fields
const enrichedMasters = masters.map(master => { const enrichedMasters = masters.map(master => {
const masterConnectionId = master.connected_to; const masterObj = master.toObject();
// Remove lora fields for master // Remove LoRa fields from master response
const masterObj = { delete masterObj.connected_lora_date;
...master.toObject(), delete masterObj.connected_lora_time;
connected_lora_date: undefined,
connected_lora_time: undefined const masterConnectionId = master.connected_to;
};
const connectedSlaves = slaves const connectedSlaves = slaves
.filter(slave => slave.connected_to === masterConnectionId) .filter(slave => slave.connected_to === masterConnectionId)
.map(slave => { .map(slave => {
const slaveObj = { const slaveObj = slave.toObject();
...slave.toObject(),
connected_gsm_date: undefined, // Remove GSM fields from slave response
connected_gsm_time: undefined delete slaveObj.connected_gsm_date;
}; delete slaveObj.connected_gsm_time;
return slaveObj; return slaveObj;
}); });

Loading…
Cancel
Save