GET ALL disconnected issues for support

master^2
Bhaskar 5 months ago
parent d45636c95f
commit 8fb564c153

@ -2624,19 +2624,86 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
return reply.code(400).send({ error: "supportId is required" });
}
const supportRecord = await Support.findOne({ supportId });
const supportRecord = await Support.findOne({ supportId }).lean();
if (!supportRecord) {
return reply.code(404).send({ message: "No support record found for this supportId" });
}
const disconnectedIssues = supportRecord.issues || [];
const allIssues = supportRecord.issues || [];
const hardwareSet = new Set();
// Collect all master and slave hardware IDs
for (const issue of allIssues) {
if (issue.hardwareId) hardwareSet.add(issue.hardwareId);
if (Array.isArray(issue.hardwareIds)) {
issue.hardwareIds.forEach(id => hardwareSet.add(id));
}
}
const hardwareIds = [...hardwareSet];
const sensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean();
// Map sensors by hardwareId
const sensorMap = {};
for (const sensor of sensors) {
sensorMap[sensor.hardwareId] = sensor;
}
const masterMap = {};
// Structure data
for (const sensor of sensors) {
if (sensor.type === "master") {
masterMap[sensor.hardwareId] = {
hardwareId: sensor.hardwareId,
masterName: sensor.masterName || sensor.tankName || "",
location: sensor.location || "",
type: "master",
connected_status: sensor.connected_status,
gsm_last_check_time: sensor.gsm_last_check_time,
gsm_last_disconnect_time: sensor.gsm_last_disconnect_time,
connected_gsm_date: sensor.connected_gsm_date,
connected_gsm_time: sensor.connected_gsm_time,
connected_lora_date: sensor.connected_lora_date,
connected_lora_time: sensor.connected_lora_time,
connected_slave_count: 0,
connected_slaves: []
};
}
}
// Add slaves under corresponding masters
for (const sensor of sensors) {
if (sensor.type === "slave" && sensor.connected_to) {
const master = masterMap[sensor.connected_to];
if (master) {
master.connected_slaves.push({
hardwareId: sensor.hardwareId,
tankName: sensor.tankName || "",
location: sensor.location || "",
connected_status: sensor.connected_status,
connected_lora_time: sensor.connected_lora_time,
connected_lora_date: sensor.connected_lora_date,
lora_last_check_time: sensor.lora_last_check_time,
lora_last_disconnect_time: sensor.lora_last_disconnect_time,
connected_to: sensor.connected_to,
masterName: master.masterName,
type: "slave",
typeOfWater: sensor.typeOfWater,
tankHeight: sensor.tankHeight
});
master.connected_slave_count++;
}
}
}
const finalResponse = Object.values(masterMap);
return reply.send({
status_code: 200,
supportId,
totalIssues: disconnectedIssues.length,
disconnectedIssues,
totalMasters: finalResponse.length,
disconnectedIssues: finalResponse
});
} catch (error) {
@ -2644,3 +2711,4 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
return reply.code(500).send({ error: "Internal server error" });
}
};

Loading…
Cancel
Save