|
|
|
|
@ -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"
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|