master^2
Bhaskar 3 months ago
parent d8f9fa744d
commit 479e7874db

@ -1227,124 +1227,69 @@ exports.createMasterSlaveData = async (req, reply) => {
reply.status(500).send({ message: err.message }); reply.status(500).send({ message: err.message });
} }
}; };
// exports.masterConnectedSlaveList = async (req, reply) => {
// try {
// const { connectedTo } = req.params;
// // Step 1: Find all slave tanks where connected_to matches
// const slaveTanks = await Insensors.find({ connected_to: connectedTo }).lean();
// console.log(slaveTanks, "slaveTanks");
// if (!slaveTanks || slaveTanks.length === 0) {
// return reply.status(404).send({
// success: false,
// message: "No tanks found for the given connected_to value"
// });
// }
// // Step 2: Fetch `tankLocation` and `typeOfWater` from the Tank schema (for master device display)
// const tankDetails = await Tank.findOne(
// { hardwareId: connectedTo },
// { tankLocation: 1, typeOfWater: 1 }
// );
// if (!tankDetails) {
// return reply.status(404).send({
// success: false,
// message: "Tank details not found for the given connectedTo"
// });
// }
// // Step 3: Count the number of connected slaves
// const slaveCount = slaveTanks.length;
// // Step 4: Fetch latest IotData for the master to extract tankHeight for each slave
// const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean();
// // Step 5: Prepare processed response for each tank
// const processedSlaves = slaveTanks.map(slave => {
// if (slave.type === 'slave') {
// // Find matching tank data for this slave in IotData
// const matchingTankData = latestIotData?.tanks?.find(tank => tank.tankhardwareId === slave.hardwareId);
// return {
// ...slave,
// tankHeight: matchingTankData?.tankHeight ?? null // Add tankHeight if found
// };
// } else {
// // Remove unnecessary fields for master type
// const {
// tankName,
// tankLocation,
// typeOfWater,
// ...rest
// } = slave;
// return rest;
// }
// });
// return reply.send({
// success: true,
// tankLocation: tankDetails.tankLocation,
// typeOfWater: tankDetails.typeOfWater,
// connectedSlaveCount: slaveCount,
// data: processedSlaves
// });
// } 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) => { exports.masterConnectedSlaveList = async (req, reply) => {
try { try {
const { connectedTo } = req.params; const { connectedTo } = req.params;
// Step 1: Get master details // Step 1: Find all slave tanks where connected_to matches
const master = await Insensors.findOne({ hardwareId: connectedTo, type: 'master' }).lean(); const slaveTanks = await Insensors.find({ connected_to: connectedTo }).lean();
if (!master) { console.log(slaveTanks, "slaveTanks");
if (!slaveTanks || slaveTanks.length === 0) {
return reply.status(404).send({ return reply.status(404).send({
success: false, success: false,
message: "Master device not found" message: "No tanks found for the given connected_to value"
}); });
} }
// Step 2: Get slave tanks connected to master // Step 2: Fetch `tankLocation` and `typeOfWater` from the Tank schema (for master device display)
const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave' }).lean(); const tankDetails = await Tank.findOne(
const slaveCount = slaveTanks.length; { hardwareId: connectedTo },
{ tankLocation: 1, typeOfWater: 1 }
);
if (!tankDetails) {
return reply.status(404).send({
success: false,
message: "Tank details not found for the given connectedTo"
});
}
// Step 3: Get Tank metadata for master // Step 3: Count the number of connected slaves
const tankDetails = await Tank.findOne({ hardwareId: connectedTo }, { tankLocation: 1, typeOfWater: 1 }).lean(); const slaveCount = slaveTanks.length;
// Step 4: Get latest IotData for master // Step 4: Fetch latest IotData for the master to extract tankHeight for each slave
const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean();
// Step 5: Process slaves // Step 5: Prepare processed response for each tank
const processedSlaves = slaveTanks.map(slave => { const processedSlaves = slaveTanks.map(slave => {
if (slave.type === 'slave') {
// Find matching tank data for this slave in IotData
const matchingTankData = latestIotData?.tanks?.find(tank => tank.tankhardwareId === slave.hardwareId); const matchingTankData = latestIotData?.tanks?.find(tank => tank.tankhardwareId === slave.hardwareId);
return { return {
...slave, ...slave,
tankHeight: matchingTankData?.tankHeight ?? null tankHeight: matchingTankData?.tankHeight ?? null // Add tankHeight if found
}; };
} else {
// Remove unnecessary fields for master type
const {
tankName,
tankLocation,
typeOfWater,
...rest
} = slave;
return rest;
}
}); });
// Step 6: Prepare full master object
const masterResponse = {
...master,
tankLocation: tankDetails?.tankLocation || null,
typeOfWater: tankDetails?.typeOfWater || null
};
return reply.send({ return reply.send({
success: true, success: true,
master: masterResponse, tankLocation: tankDetails.tankLocation,
typeOfWater: tankDetails.typeOfWater,
connectedSlaveCount: slaveCount, connectedSlaveCount: slaveCount,
slaves: processedSlaves data: processedSlaves
}); });
} catch (error) { } catch (error) {
@ -1357,6 +1302,62 @@ exports.masterConnectedSlaveList = async (req, reply) => {
}; };
// 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 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 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 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
// });
// } catch (error) {
// console.error("Error fetching master connected slave data:", error);
// return reply.status(500).send({
// success: false,
// message: "Internal Server Error"
// });
// }
// };
exports.mastrerList = async (req, reply) => { exports.mastrerList = async (req, reply) => {
try { try {

Loading…
Cancel
Save