diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index b09ceb9a..1cf85216 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -349,6 +349,7 @@ exports.getTanksofParticularInstaller = async (req, reply) => { // throw boom.boomify(err); // } //}; +// const boom = require("@hapi/boom"); // Assuming you are using boom for error handling @@ -356,46 +357,50 @@ exports.getTankmotordata = async (req, reply) => { try { const { startDate, stopDate } = req.body; const { customerId } = req.params; - - // Parse the input startDate and stopDate using the desired format - // const start = moment(startDate, "DD-MMM-YYYY - HH:mm").toDate(); - // const end = moment(stopDate, "DD-MMM-YYYY - HH:mm").toDate(); - // console.log(start,"start",end,"end") - // Check if the parsed dates are valid - - // Convert the dates to the correct format for storage or querying (still in UTC) - // This gives a native JS Date object for querying - // Fetch the name from the User collection based on customerId, only from profile - const user = await User.findOne({ customerId }) - .select("username"); + // Validate and format the input dates + if (!moment(startDate, "DD-MMM-YYYY - HH:mm", true).isValid() || !moment(stopDate, "DD-MMM-YYYY - HH:mm", true).isValid()) { + return reply.send({ status_code: 400, message: "Invalid date format" }); + } - if (user) { - // Get the full name (combine firstName and lastName if available) - const userName = user.username - ? `${user.username}` - : "N/A"; // Fallback if no name is found + // Convert input dates to ISO 8601 format for Date comparison + const startISODate = moment(startDate, "DD-MMM-YYYY - HH:mm").toDate(); + const stopISODate = moment(stopDate, "DD-MMM-YYYY - HH:mm").toDate(); - // Construct the query object for motor data based on customerId - const motorQuery = { customerId }; + // Convert input dates to string format for string-based comparison + const startStringDate = moment(startDate, "DD-MMM-YYYY - HH:mm").format("DD-MMM-YYYY - HH:mm"); + const stopStringDate = moment(stopDate, "DD-MMM-YYYY - HH:mm").format("DD-MMM-YYYY - HH:mm"); - // Fetch motor data for the customerId within the time range - const motorDataDocs = await MotorData.find(motorQuery) - .where("startTime") - .gte(startDate) // Greater than or equal to startDate - .lte(stopDate) // Less than or equal to stopDate - .exec(); + // Fetch the username based on customerId + const user = await User.findOne({ customerId }).select("username"); + + if (user) { + const userName = user.username || "N/A"; + + // Query the MotorData collection + const motorDataDocs = await MotorData.find({ + customerId, + $or: [ + { + startTime: { $gte: startISODate, $lte: stopISODate }, // Date-based comparison + }, + { + startTime: { $gte: startStringDate, $lte: stopStringDate }, // String-based comparison + }, + ], + }).exec(); reply.send({ status_code: 200, data: motorDataDocs, count: motorDataDocs.length, - customerName: userName, // Add the username to the response + customerName: userName, }); } else { reply.send({ status_code: 404, message: "User not found" }); } } catch (err) { + console.error("Error in getTankmotordata:", err); throw boom.boomify(err); } }; @@ -415,7 +420,7 @@ exports.updateTanklevels = async (req, reply) => { for (const tank of tanks) { const tankId = tank._id; - const tank_name = tank.tankName + const tank_name = tank.tankName let capacity = parseInt(tank.capacity.replace(/,/g, ''), 10); //let waterLevel = parseInt(tank.waterlevel.replace(/,/g, ''), 10); @@ -5665,17 +5670,17 @@ client.on('message', async (topic, message) => { inputConnection.motor_on_type = "forced_manual"; inputConnection.startTime = currentTime; // Emit motor start notification with tankName - eventEmitter.emit( - "sendMotorStartNotification", - fcmToken, // FCM tokens - hw_Id, // Motor ID - inputConnection.water_level || 0, // Water level - motorTank.blockName || "N/A", // Block name - tankName, // Tank name - inputConnection.motor_on_type, // Motor on type - "threshold", // Stop criteria - manual_threshold_time // Threshold time in mins - ); + // eventEmitter.emit( + // "sendMotorStartNotification", + // fcmToken, // FCM tokens + // hw_Id, // Motor ID + // inputConnection.water_level || 0, // Water level + // motorTank.blockName || "N/A", // Block name + // tankName, // Tank name + // inputConnection.motor_on_type, // Motor on type + // "threshold", // Stop criteria + // manual_threshold_time // Threshold time in mins + // ); } @@ -5683,15 +5688,15 @@ client.on('message', async (topic, message) => { inputConnection.motor_stop_status = "1"; // Emit motor stop notification with tankName - eventEmitter.emit( - "sendMotorStopNotification", - fcmToken, // FCM tokens - hw_Id, // Motor ID - inputConnection.water_level || 0, // Water level - motorTank.blockName || "N/A", // Block name - tankName, // Tank name - inputConnection.motor_on_type // Motor on type - ); + // eventEmitter.emit( + // "sendMotorStopNotification", + // fcmToken, // FCM tokens + // hw_Id, // Motor ID + // inputConnection.water_level || 0, // Water level + // motorTank.blockName || "N/A", // Block name + // tankName, // Tank name + // inputConnection.motor_on_type // Motor on type + // ); } await motorTank.save(); // Save the updated tank @@ -6257,3 +6262,56 @@ cron.schedule( timezone: "Asia/Kolkata", // Specify the timezone } ); + + +// const updateStopTimeFormat = async () => { +// try { +// // Find records where stopTime is null or not in the required format +// const motorDataDocs = await MotorData.find(); + +// for (const doc of motorDataDocs) { +// // Parse and validate startTime +// const startTime = moment(doc.startTime, "DD-MMM-YYYY - HH:mm", true); +// if (!startTime.isValid()) { +// console.log(`Invalid startTime for record ID: ${doc._id}`); +// continue; +// } + +// // Format startTime if it's not already formatted +// const formattedStartTime = startTime.format("DD-MMM-YYYY - HH:mm"); + +// // Check if stopTime is valid or calculate it +// let formattedStopTime = null; +// const stopTime = moment(doc.stopTime, "DD-MMM-YYYY - HH:mm", true); + +// if (!stopTime.isValid()) { +// // Calculate stopTime by adding 30 minutes to startTime +// formattedStopTime = startTime.clone().add(30, "minutes").format("DD-MMM-YYYY - HH:mm"); +// } else { +// // Format the existing stopTime +// formattedStopTime = stopTime.format("DD-MMM-YYYY - HH:mm"); +// } + +// // Update the document if startTime or stopTime is not correctly formatted +// if (doc.startTime !== formattedStartTime || doc.stopTime !== formattedStopTime) { +// await MotorData.updateOne( +// { _id: doc._id }, +// { +// $set: { +// startTime: formattedStartTime, +// stopTime: formattedStopTime, +// }, +// } +// ); +// console.log(`Updated record ID: ${doc._id}`); +// } +// } + +// console.log("StopTime format update completed."); +// } catch (err) { +// console.error("Error updating stopTime format:", err); +// } +// }; + +// // Call the function to update stopTime +// updateStopTimeFormat();