From b0907353d5dcc26283ccfd15e54be64336550882 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Fri, 11 Jul 2025 13:21:15 +0530 Subject: [PATCH] chnages --- src/controllers/installationController.js | 199 ++++++---------------- 1 file changed, 51 insertions(+), 148 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 9491f75c..53af8103 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1700,7 +1700,6 @@ exports.masterConnectedSlaveList = async (req, reply) => { try { const { connectedTo, customerId } = req.params; - if (!connectedTo) { return reply.status(400).send({ success: false, message: "connectedTo is required" }); } @@ -1709,37 +1708,30 @@ exports.masterConnectedSlaveList = async (req, reply) => { return reply.status(400).send({ success: false, message: "customerId is required" }); } - // Step 1: Get master device details (only for this customer) + // Step 1: Get master device const master = await Insensors.findOne({ hardwareId: connectedTo, type: 'master', customerId }).lean(); if (!master) { - return reply.status(404).send({ - success: false, - message: "Master device not found" - }); + return reply.status(404).send({ success: false, message: "Master device not found" }); } - // Step 2: Get tank metadata for master + const masterHardwareId = master.hardwareId; + console.log("masterHardwareId",masterHardwareId) + // Step 2: Get tank metadata const tankDetails = await Tank.findOne( { hardwareId: connectedTo }, - { - tankLocation: 1, - typeOfWater: 1, - height: 1, - length: 1, - width: 1 - } + { tankLocation: 1, typeOfWater: 1, height: 1, length: 1, width: 1 } ).lean(); const masterTypeOfWater = tankDetails?.typeOfWater || null; - console.log("masterTypeOfWater",masterTypeOfWater) - // Step 3: Get slave tanks connected to master and belonging to this customer + + // Step 3: Get slave devices const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave', customerId }).lean(); const slaveCount = slaveTanks.length; - // Step 4: Get latest IotData for master + // Step 4: Latest IoT data const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); - // Step 5: Fetch order to get masterName, location, etc. + // Step 5: Order info const order = await Order.findOne({ "master_connections.hardwareId": connectedTo }).lean(); let masterOrderInfo = {}; @@ -1768,9 +1760,15 @@ exports.masterConnectedSlaveList = async (req, reply) => { electricals = order.electricals || []; } - // Step 6: Build master response object + // Step 6: Build master response **without** hardwareId + const { + hardwareId, // exclude this + ...restMasterFields + } = master; + const masterResponse = { - ...master, + ...restMasterFields, + masterHardwareId: masterHardwareId, // new field isMaster: true, tankLocation: tankDetails?.tankLocation || null, product_status: master.product_status || 'pending', @@ -1786,133 +1784,39 @@ exports.masterConnectedSlaveList = async (req, reply) => { width: tankDetails?.width || null }; - // Step 7: Process each slave - // const processedSlaves = await Promise.all(slaveTanks.map(async slave => { - // const originalHardwareId = slave.connected_to; - // const tankHardwareId = slave.tankhardwareId; - // console.log("originalHardwareId",originalHardwareId) - // console.log("tankHardwareId",tankHardwareId) - - // const finalHardwareId = tankHardwareId || originalHardwareId; - - // const matchingTankData = latestIotData?.tanks?.find(t => - // t.tankhardwareId === finalHardwareId || t.hardwareId === finalHardwareId - // ); - - // // Fetch slave's tank metadata - // const slaveTankMeta = await Tank.findOne( - // // { hardwareId: slave.connected_to }, - // { - // $or: [ - // { hardwareId: slave.connected_to }, - // { hardwareId: slave.tankhardwareId } // assuming tankhardwareId is saved as hardwareId in Tank collection - // ] - // }, - // { height: 1, length: 1, width: 1 } - // ).lean(); - // console.log("slaveTankMeta",slaveTankMeta) - // return { - // ...slave, - // isMaster: false, - // hardwareId: finalHardwareId, - // tankHeight: matchingTankData?.tankHeight ?? null, - // typeOfWater: masterTypeOfWater === 'bore' ? 'bore' : (slave.typeOfWater || null), - // height: slaveTankMeta?.height || null, - // length: slaveTankMeta?.length || null, - // width: slaveTankMeta?.width || null - // }; - // })); - + // Step 7: Process slaves const processedSlaves = await Promise.all(slaveTanks.map(async slave => { - // const finalHardwareId = slave.tankhardwareId || slave.connected_to; - // console.log("finalHardwareId",finalHardwareId) - // // Find matching tank meta by hardwareId in Tank collection - // const slaveTankMeta = await Tank.findOne( - // { hardwareId: finalHardwareId }, - // { height: 1, length: 1, width: 1 } - // ).lean(); -// const finalHardwareId = slave.tankhardwareId || slave.connected_to; - -// // Try match by tankhardwareId first -// let slaveTankMeta = await Tank.findOne( -// { tankhardwareId: slave.tankhardwareId }, -// { height: 1, length: 1, width: 1 } -// ).lean(); - -// // If not found, fallback to match by hardwareId -// if (!slaveTankMeta && slave.connected_to) { -// slaveTankMeta = await Tank.findOne( -// { hardwareId: slave.connected_to }, -// { height: 1, length: 1, width: 1 } -// ).lean(); -// } - -// console.log("slaveTankMeta",slaveTankMeta) - -// // Find matching IoT tank data (for tankHeight) -// const matchingTankData = latestIotData?.tanks?.find(t => -// t.tankhardwareId === finalHardwareId || t.connected_to === finalHardwareId -// ); -// console.log("matchingTankData",matchingTankData) - -// return { -// ...slave, -// isMaster: false, -// hardwareId: finalHardwareId, -// tankHeight: matchingTankData?.tankHeight ?? null, -// typeOfWater: masterTypeOfWater === 'bore' ? 'bore' : (slave.typeOfWater || null), -// height: slaveTankMeta?.height || null, -// length: slaveTankMeta?.length || null, -// width: slaveTankMeta?.width || null -// }; -const finalHardwareId = slave.tankhardwareId || slave.connected_to; - -// Try match by tankhardwareId first, filtered by customerId -let slaveTankMeta = await Tank.findOne( - { - tankhardwareId: slave.tankhardwareId, - customerId: customerId - }, - { height: 1, length: 1, width: 1 } -).lean(); - -// If not found, fallback to match by hardwareId + customerId -if (!slaveTankMeta && slave.connected_to) { - slaveTankMeta = await Tank.findOne( - { - hardwareId: slave.connected_to, - customerId: customerId - }, - { height: 1, length: 1, width: 1 } - ).lean(); -} - -console.log("slaveTankMeta", slaveTankMeta); - -// Find matching IoT tank data (for tankHeight) -const matchingTankData = latestIotData?.tanks?.find(t => - t.tankHardwareId === finalHardwareId || t.connected_to === finalHardwareId -); - -console.log("matchingTankData",matchingTankData) -return { - ...slave, - isMaster: false, - // hardwareId: finalHardwareId, - product_status: slave.product_status || 'pending', - tankHeight: matchingTankData?.tankHeight ?? null, - typeOfWater: masterTypeOfWater === 'bore' ? 'bore' : (slave.typeOfWater || null), - height: slaveTankMeta?.height || null, - length: slaveTankMeta?.length || null, - width: slaveTankMeta?.width || null -}; - -})); + const finalHardwareId = slave.tankhardwareId || slave.connected_to; + + let slaveTankMeta = await Tank.findOne( + { tankhardwareId: slave.tankhardwareId, customerId }, + { height: 1, length: 1, width: 1 } + ).lean(); + + if (!slaveTankMeta && slave.connected_to) { + slaveTankMeta = await Tank.findOne( + { hardwareId: slave.connected_to, customerId }, + { height: 1, length: 1, width: 1 } + ).lean(); + } + const matchingTankData = latestIotData?.tanks?.find(t => + t.tankHardwareId === finalHardwareId || t.connected_to === finalHardwareId + ); - // Step 8: Combine into one array - const combinedData = [masterResponse, ...processedSlaves]; + return { + ...slave, + isMaster: false, + product_status: slave.product_status || 'pending', + tankHeight: matchingTankData?.tankHeight ?? null, + typeOfWater: masterTypeOfWater === 'bore' ? 'bore' : (slave.typeOfWater || null), + height: slaveTankMeta?.height || null, + length: slaveTankMeta?.length || null, + width: slaveTankMeta?.width || null + }; + })); + // Step 8: Send response return reply.send({ success: true, tankLocation: tankDetails?.tankLocation || null, @@ -1923,19 +1827,18 @@ return { sensors: sensorsCount, motor_switches: motorSwitches, electricals: electricals, - data: combinedData + data: [masterResponse, ...processedSlaves] }); } catch (error) { console.error("Error fetching master connected slave data:", error); - return reply.status(500).send({ - success: false, - message: "Internal Server Error" - }); + return reply.status(500).send({ success: false, message: "Internal Server Error" }); } }; + + exports.updateWorkStatusAndProductStatus = async (req, reply) => { try { const { connectedTo, teamMemberId, customerId } = req.params;