diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 2dfd81c9..fedfe7ed 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -7043,40 +7043,74 @@ exports.getRemoveConnectedMastersWithSlaves = async (req, reply) => { return reply.code(400).send({ error: "supportId and hardwareId are required" }); } - // Find the support record - const supportRecord = await Support.findOne({ supportId }).lean(); + // Step 1: Get support record + const supportRecord = await Support.findOne({ supportId }); if (!supportRecord) { return reply.code(404).send({ message: "No support record found for this supportId" }); } - const originalIssues = supportRecord.issues || []; + // Step 2: Get master sensor + const masterSensor = await Insensors.findOne({ hardwareId, type: "master" }).lean(); + if (!masterSensor) { + return reply.code(404).send({ message: "Master not found in Insensors" }); + } - // Filter out issues where hardwareId matches hardwareId or masterHardwareId - const filteredIssues = originalIssues.filter(issue => { - return !( - issue.hardwareId === hardwareId || - issue.masterHardwareId === hardwareId - ); - }); + // Step 3: Check master is connected + if (masterSensor.connected_status !== "connected") { + return reply.code(400).send({ message: "Master is not in connected status" }); + } + + // Step 4: Get connected slave sensors + const slaveSensors = await Insensors.find({ connected_to: hardwareId, type: "slave" }).lean(); + + const allSlavesConnected = slaveSensors.every(slave => slave.connected_status === "connected"); + + if (!allSlavesConnected) { + return reply.code(400).send({ message: "Not all connected slaves are in connected status" }); + } - // Update the support record + // Step 5: Move issues from issues → resolvedIssues if hardwareId or masterHardwareId matches + const currentIssues = supportRecord.issues || []; + const resolvedIssues = supportRecord.resolvedIssues || []; + + const { movedIssues, remainingIssues } = currentIssues.reduce( + (acc, issue) => { + if (issue.hardwareId === hardwareId || issue.masterHardwareId === hardwareId) { + issue.resolvedAt = new Date(); + acc.movedIssues.push(issue); + } else { + acc.remainingIssues.push(issue); + } + return acc; + }, + { movedIssues: [], remainingIssues: [] } + ); + + // Step 6: Save updates await Support.updateOne( { supportId }, - { $set: { issues: filteredIssues } } + { + $set: { + issues: remainingIssues, + resolvedIssues: [...resolvedIssues, ...movedIssues] + } + } ); return reply.send({ status_code: 200, - message: `Issue(s) with hardwareId "${hardwareId}" removed successfully.`, - remainingIssues: filteredIssues + message: `Master and all connected slaves are connected. ${movedIssues.length} issue(s) moved to resolved.`, + movedHardwareId: hardwareId, + resolvedIssues: movedIssues }); } catch (error) { - console.error("Error in removeIssueByHardwareId:", error); + console.error("Error in getRemoveConnectedMastersWithSlaves:", error); return reply.code(500).send({ error: "Internal server error" }); } }; + // exports.getDisconnectedCustomerDetails = async (req, reply) => { // try { // const { supportId } = req.params;