From 8fb564c1535adb84354ffed5524f3d7d388d1921 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Tue, 29 Apr 2025 15:15:40 +0530 Subject: [PATCH] GET ALL disconnected issues for support --- src/controllers/installationController.js | 78 +++++++++++++++++++++-- 1 file changed, 73 insertions(+), 5 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 7598623d..99e146cd 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -2624,19 +2624,86 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { return reply.code(400).send({ error: "supportId is required" }); } - const supportRecord = await Support.findOne({ supportId }); - + const supportRecord = await Support.findOne({ supportId }).lean(); if (!supportRecord) { return reply.code(404).send({ message: "No support record found for this supportId" }); } - const disconnectedIssues = supportRecord.issues || []; + const allIssues = supportRecord.issues || []; + const hardwareSet = new Set(); + + // Collect all master and slave hardware IDs + for (const issue of allIssues) { + if (issue.hardwareId) hardwareSet.add(issue.hardwareId); + if (Array.isArray(issue.hardwareIds)) { + issue.hardwareIds.forEach(id => hardwareSet.add(id)); + } + } + + const hardwareIds = [...hardwareSet]; + const sensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean(); + + // Map sensors by hardwareId + const sensorMap = {}; + for (const sensor of sensors) { + sensorMap[sensor.hardwareId] = sensor; + } + + const masterMap = {}; + + // Structure data + for (const sensor of sensors) { + if (sensor.type === "master") { + masterMap[sensor.hardwareId] = { + hardwareId: sensor.hardwareId, + masterName: sensor.masterName || sensor.tankName || "", + location: sensor.location || "", + type: "master", + connected_status: sensor.connected_status, + gsm_last_check_time: sensor.gsm_last_check_time, + gsm_last_disconnect_time: sensor.gsm_last_disconnect_time, + connected_gsm_date: sensor.connected_gsm_date, + connected_gsm_time: sensor.connected_gsm_time, + connected_lora_date: sensor.connected_lora_date, + connected_lora_time: sensor.connected_lora_time, + connected_slave_count: 0, + connected_slaves: [] + }; + } + } + + // Add slaves under corresponding masters + for (const sensor of sensors) { + if (sensor.type === "slave" && sensor.connected_to) { + const master = masterMap[sensor.connected_to]; + if (master) { + master.connected_slaves.push({ + hardwareId: sensor.hardwareId, + tankName: sensor.tankName || "", + location: sensor.location || "", + connected_status: sensor.connected_status, + connected_lora_time: sensor.connected_lora_time, + connected_lora_date: sensor.connected_lora_date, + lora_last_check_time: sensor.lora_last_check_time, + lora_last_disconnect_time: sensor.lora_last_disconnect_time, + connected_to: sensor.connected_to, + masterName: master.masterName, + type: "slave", + typeOfWater: sensor.typeOfWater, + tankHeight: sensor.tankHeight + }); + master.connected_slave_count++; + } + } + } + + const finalResponse = Object.values(masterMap); return reply.send({ status_code: 200, supportId, - totalIssues: disconnectedIssues.length, - disconnectedIssues, + totalMasters: finalResponse.length, + disconnectedIssues: finalResponse }); } catch (error) { @@ -2644,3 +2711,4 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { return reply.code(500).send({ error: "Internal server error" }); } }; +