diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 835a6846..2dfd81c9 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1228,6 +1228,68 @@ exports.createMasterSlaveData = async (req, reply) => { } }; +exports.masterConnectedSlaveList = async (req, reply) => { + try { + const { connectedTo } = req.params; + + // Step 1: Get master device details + const master = await Insensors.findOne({ hardwareId: connectedTo, type: 'master' }).lean(); + if (!master) { + return reply.status(404).send({ + success: false, + message: "Master device not found" + }); + } + + // Step 2: Get tank metadata for master + const tankDetails = await Tank.findOne({ hardwareId: connectedTo }, { tankLocation: 1, typeOfWater: 1 }).lean(); + + // Step 3: Get slave tanks connected to master + const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave' }).lean(); + const slaveCount = slaveTanks.length; + + // Step 4: Get latest IotData for master + const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); + + // Step 5: Prepare master object for response + const masterResponse = { + ...master, + isMaster: true, + tankLocation: tankDetails?.tankLocation || null, + typeOfWater: tankDetails?.typeOfWater || null, + tankHeight: null // Master doesn't have individual tankHeight + }; + + // Step 6: Process each slave + const processedSlaves = slaveTanks.map(slave => { + const matchingTankData = latestIotData?.tanks?.find(t => t.tankhardwareId === slave.hardwareId); + + return { + ...slave, + isMaster: false, + tankHeight: matchingTankData?.tankHeight ?? null + }; + }); + + // Step 7: Combine master and slaves into one array + const combinedData = [masterResponse, ...processedSlaves]; + + return reply.send({ + success: true, + connectedSlaveCount: slaveCount, + data: combinedData + }); + + } catch (error) { + console.error("Error fetching master connected slave data:", error); + return reply.status(500).send({ + success: false, + message: "Internal Server Error" + }); + } +}; + + // exports.masterConnectedSlaveList = async (req, reply) => { // try { // const { connectedTo } = req.params; @@ -1303,60 +1365,60 @@ exports.createMasterSlaveData = async (req, reply) => { -exports.masterConnectedSlaveList = async (req, reply) => { - try { - const { connectedTo } = req.params; +// exports.masterConnectedSlaveList = async (req, reply) => { +// try { +// const { connectedTo } = req.params; - // Step 1: Get master details - const master = await Insensors.findOne({ hardwareId: connectedTo, type: 'master' }).lean(); - if (!master) { - return reply.status(404).send({ - success: false, - message: "Master device not found" - }); - } +// // Step 1: Get master details +// const master = await Insensors.findOne({ hardwareId: connectedTo, type: 'master' }).lean(); +// if (!master) { +// return reply.status(404).send({ +// success: false, +// message: "Master device not found" +// }); +// } - // Step 2: Get slave tanks connected to master - const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave' }).lean(); - const slaveCount = slaveTanks.length; +// // Step 2: Get slave tanks connected to master +// const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave' }).lean(); +// const slaveCount = slaveTanks.length; - // Step 3: Get Tank metadata for master - const tankDetails = await Tank.findOne({ hardwareId: connectedTo }, { tankLocation: 1, typeOfWater: 1 }).lean(); +// // Step 3: Get Tank metadata for master +// const tankDetails = await Tank.findOne({ hardwareId: connectedTo }, { tankLocation: 1, typeOfWater: 1 }).lean(); - // Step 4: Get latest IotData for master - const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); +// // Step 4: Get latest IotData for master +// const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); - // Step 5: Process slaves - const processedSlaves = slaveTanks.map(slave => { - const matchingTankData = latestIotData?.tanks?.find(tank => tank.tankhardwareId === slave.hardwareId); - return { - ...slave, - tankHeight: matchingTankData?.tankHeight ?? null - }; - }); +// // Step 5: Process slaves +// const processedSlaves = slaveTanks.map(slave => { +// const matchingTankData = latestIotData?.tanks?.find(tank => tank.tankhardwareId === slave.hardwareId); +// return { +// ...slave, +// tankHeight: matchingTankData?.tankHeight ?? null +// }; +// }); - // Step 6: Prepare full master object - const masterResponse = { - ...master, - tankLocation: tankDetails?.tankLocation || null, - typeOfWater: tankDetails?.typeOfWater || null - }; +// // Step 6: Prepare full master object +// const masterResponse = { +// ...master, +// tankLocation: tankDetails?.tankLocation || null, +// typeOfWater: tankDetails?.typeOfWater || null +// }; - return reply.send({ - success: true, - master: masterResponse, - connectedSlaveCount: slaveCount, - slaves: processedSlaves - }); +// return reply.send({ +// success: true, +// master: masterResponse, +// connectedSlaveCount: slaveCount, +// slaves: processedSlaves +// }); - } catch (error) { - console.error("Error fetching master connected slave data:", error); - return reply.status(500).send({ - success: false, - message: "Internal Server Error" - }); - } -}; +// } catch (error) { +// console.error("Error fetching master connected slave data:", error); +// return reply.status(500).send({ +// success: false, +// message: "Internal Server Error" +// }); +// } +// };