master^2
Bhaskar 3 months ago
parent f811b71053
commit b0907353d5

@ -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;

Loading…
Cancel
Save