diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index fc780421..71865407 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -7650,66 +7650,84 @@ exports.updateComments = async (req, reply) => { exports.resolvedIssuesForSupport = async (req, reply) => { try { const { supportId } = req.params; + const { category, hardwareId } = req.body; - if (!supportId) { - return reply.code(400).send({ error: "supportId is required" }); + if (!supportId || !category || !hardwareId) { + return reply.code(400).send({ + message: "supportId (path), category and hardwareId (body) are required", + }); } - // Fetch support document const support = await Support.findOne({ supportId }); if (!support) { - return reply.code(404).send({ error: "Support record not found" }); + return reply.code(404).send({ message: "Support record not found" }); } - const categorizedIssues = support.categorizedIssues || []; - const resolvedIssues = support.resolvedIssues || []; - let updatedCount = 0; + if (!Array.isArray(support.categorizedIssues)) { + support.categorizedIssues = []; + } - // Filter escalation issues - const escalationIssues = categorizedIssues.filter(issue => issue.category === "Escalation"); + if (!Array.isArray(support.resolvedIssues)) { + support.resolvedIssues = []; + } - for (const issue of escalationIssues) { - const masterHardwareId = issue.masterHardwareId || issue.hardwareId; + const nowTime = moment().tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss"); - // Get master sensor - const master = await Insensors.findOne({ hardwareId: masterHardwareId }).lean(); - if (!master) continue; + // Find the issue in categorizedIssues matching hardwareId and category + const index = support.categorizedIssues.findIndex((issue) => { + if (issue.hardwareId === hardwareId && issue.category === category) return true; + return false; + }); - // Get slaves connected to this master - const slaves = await Insensors.find({ connected_to: masterHardwareId }).lean(); + if (index === -1) { + return reply.code(404).send({ + message: `No issue found in categorizedIssues with hardwareId: ${hardwareId} and category: ${category}`, + }); + } - // Check if master and all slaves are connected - const allConnected = master.connected_status === "connected" && slaves.every(s => s.connected_status === "connected"); + const issue = support.categorizedIssues[index]; + const masterHardwareId = issue.masterHardwareId || issue.hardwareId; - if (allConnected) { - // Prepare resolved issue data - const resolvedIssue = { - ...issue.toObject ? issue.toObject() : issue, // convert if mongoose doc - category: "Resolved", - resolvedAt: new Date().toISOString(), - originalMovedAt: issue.movedAt || null, - }; + // Fetch master and slaves connection status + const master = await Insensors.findOne({ hardwareId: masterHardwareId }).lean(); + if (!master) { + return reply.code(404).send({ message: `Master device not found with hardwareId ${masterHardwareId}` }); + } - // Remove from categorizedIssues - support.categorizedIssues = support.categorizedIssues.filter(i => i._id.toString() !== issue._id.toString()); + const slaves = await Insensors.find({ connected_to: masterHardwareId }).lean(); - // Add to resolvedIssues - support.resolvedIssues.push(resolvedIssue); + const allConnected = + master.connected_status === "connected" && + slaves.every((s) => s.connected_status === "connected"); - updatedCount++; - } + if (!allConnected) { + return reply.send({ + message: "Master or some slaves are not connected yet. Issue cannot be resolved.", + }); } - // Save updated support document + // Move issue to resolvedIssues + const resolvedIssue = { + type: issue.type, + hardwareId: issue.hardwareId, + masterHardwareId, + category: "Resolved", + resolvedAt: nowTime, + originalMovedAt: issue.movedAt || null, + movedToCategory: true, + slaveName: issue.slaveName || null, + }; + + support.resolvedIssues.push(resolvedIssue); + + // Remove from categorizedIssues + support.categorizedIssues.splice(index, 1); + await support.save(); - return reply.send({ - status: "success", - message: `${updatedCount} issue(s) moved to resolved`, - supportId, - }); - } catch (error) { - console.error("Error in updateIssueResolutionBasedOnConnectionStatus:", error); - return reply.code(500).send({ error: "Internal server error" }); + return reply.send({ message: "Issue moved to resolved category successfully" }); + } catch (err) { + console.error("Error in updateIssueResolutionBasedOnConnectionStatus:", err); + return reply.code(500).send({ error: "Internal Server Error" }); } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/routes/installationRoute.js b/src/routes/installationRoute.js index 43756337..aec2538c 100644 --- a/src/routes/installationRoute.js +++ b/src/routes/installationRoute.js @@ -908,6 +908,14 @@ module.exports = function (fastify, opts, next) { } }, + body: { + type: "object", + required: ["category", "hardwareId"], + properties: { + category: { type: "string" }, + hardwareId: { type: "string" }, + }, + }, }, handler: installationController.resolvedIssuesForSupport });