From a1dd52f072d78a908ad3926f85c36df1e39a720e Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Wed, 16 Apr 2025 15:35:22 +0530 Subject: [PATCH] CHANGES --- src/controllers/installationController.js | 108 +++++++--------------- 1 file changed, 34 insertions(+), 74 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index de05b9fd..36e6efca 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1036,6 +1036,7 @@ exports.mastrerList = async (req, reply) => { //const moment = require('moment'); // For time calculations + exports.getMasterSlaveSummary = async (req, reply) => { try { const { customerId } = req.params; @@ -1049,86 +1050,44 @@ exports.getMasterSlaveSummary = async (req, reply) => { const masters = allDevices.filter(device => device.type === 'master'); const slaves = allDevices.filter(device => device.type === 'slave'); - // Update connection status and timestamps - const updateStatusPromises = allDevices.map(async device => { - let checkHardwareId; - - if (device.type === 'master') { - checkHardwareId = device.hardwareId?.trim(); - } else if (device.type === 'slave') { - checkHardwareId = device.hardwareId?.trim(); // Use slave's own hardwareId - } - - if (!checkHardwareId) return; - - const latestData = await IotData.findOne({ hardwareId: checkHardwareId }) + const enrichDeviceWithTimestamp = async (device) => { + const hardwareId = device.hardwareId?.trim(); + if (!hardwareId) return device.toObject(); + + const latestData = await IotData.findOne({ hardwareId }) .sort({ date: -1 }) .lean(); - - let status = "disconnected"; - const updateFields = {}; - - if (latestData?.date) { - const now = moment(); - const lastSeen = moment(latestData.date); - const diff = now.diff(lastSeen, 'minutes'); - - if (diff <= 10) { - status = "connected"; - - const indiaTime = moment.tz(latestData.date, "Asia/Kolkata"); - const date = indiaTime.format("YYYY-MM-DD"); - const time = indiaTime.format("HH:mm:ss"); - - if (device.type === 'master') { - updateFields.connected_gsm_date = date; - updateFields.connected_gsm_time = time; - device.connected_gsm_date = date; - device.connected_gsm_time = time; - } - - if (device.type === 'slave') { - updateFields.connected_lora_date = date; - updateFields.connected_lora_time = time; - device.connected_lora_date = date; - device.connected_lora_time = time; - } - } - } - - updateFields.connected_status = status; - await Insensors.updateOne({ _id: device._id }, { $set: updateFields }); - device.connected_status = status; - }); - - - - await Promise.all(updateStatusPromises); - // Build enriched masters and exclude irrelevant fields - const enrichedMasters = masters.map(master => { - const masterObj = master.toObject(); + const enriched = device.toObject(); - // Remove LoRa fields from master response - delete masterObj.connected_lora_date; - delete masterObj.connected_lora_time; + if (latestData?.date) { + const indiaTime = moment.tz(latestData.date, "Asia/Kolkata"); + const date = indiaTime.format("DD-MM-YYYY"); + const time = indiaTime.format("HH:mm:ss"); - const masterConnectionId = master.connected_to; + if (device.type === 'master') { + enriched.connected_gsm_date = date; + enriched.connected_gsm_time = time; + } - const connectedSlaves = slaves - .filter(slave => slave.connected_to === masterConnectionId) - .map(slave => { - const slaveObj = slave.toObject(); + if (device.type === 'slave') { + enriched.connected_lora_date = date; + enriched.connected_lora_time = time; + } + } - // Remove GSM fields from slave response - delete slaveObj.connected_gsm_date; - delete slaveObj.connected_gsm_time; + return enriched; + }; - return slaveObj; - }); + // Enrich all devices + const enrichedMasters = await Promise.all(masters.map(enrichDeviceWithTimestamp)); + const enrichedSlaves = await Promise.all(slaves.map(enrichDeviceWithTimestamp)); + // Match slaves to their masters + const masterSummary = enrichedMasters.map(master => { + const connectedSlaves = enrichedSlaves.filter(slave => slave.connected_to === master.connected_to); return { - ...masterObj, + ...master, connected_slave_count: connectedSlaves.length, connected_slaves: connectedSlaves }; @@ -1137,13 +1096,13 @@ exports.getMasterSlaveSummary = async (req, reply) => { return reply.send({ status_code: 200, message: "Success", - master_count: masters.length, - slave_count: slaves.length, - data: enrichedMasters + master_count: enrichedMasters.length, + slave_count: enrichedSlaves.length, + data: masterSummary }); } catch (err) { - console.error("Error:", err); + console.error("Error in getMasterSlaveSummary:", err); return reply.status(500).send({ status_code: 500, message: "Internal Server Error" @@ -1153,6 +1112,7 @@ exports.getMasterSlaveSummary = async (req, reply) => { + // exports.getIotDataByCustomer = async (req, reply) => { // try { // const { customerId } = req.params;