From 04b49063b0279e2e528955b7933f944af2b949b9 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 10 Jan 2025 11:40:31 +0530 Subject: [PATCH] changes in user.js --- src/config/config.js | 4 +- src/controllers/tanksController.js | 131 ++++++++++------------------- src/models/User.js | 2 +- 3 files changed, 49 insertions(+), 88 deletions(-) diff --git a/src/config/config.js b/src/config/config.js index f5be2f9e..0ac8f6e2 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -21,10 +21,10 @@ var termination = chalk.bold.magenta; // TODO // Need to read database url from a environment variable. // const databaseURL = "mongodb://armintatankdbuser:armintatank1@35.207.198.4:27017/arminta-tank-db; -//const databaseURLNew = "mongodb://35.207.198.4:27017/arminta-tank-db"; +const databaseURLNew = "mongodb://35.207.198.4:27017/arminta-tank-db"; //const databaseURLNew = "mongodb://35.200.129.165:27017/health-care-db"; -const databaseURLNew = "mongodb://127.0.0.1:27017/arminta-tank-db"; +//const databaseURLNew = "mongodb://127.0.0.1:27017/arminta-tank-db"; // Next line not used , or no need to pass default db in the mongo connection url. const defaultDatabase = "arminta-tank-db"; diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index ddaa05c5..c5365f45 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -1564,60 +1564,18 @@ admin.initializeApp({ // await sendNotification(fcmTokens, 'Motor Started', `Motor ID: ${motorId} started successfully at ${timestamp}. Current Water Level: ${waterLevel} Ltrs`); // }); -// eventEmitter.on('motorStart', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName, startTime, motorOnType, stopCriteria) => { -// const message = `MotorId '${motorId}' Water supply from '${blockName}' to '${tankName}' started at ${startTime} by '${motorOnType}' mode and will stop after ${stopCriteria}. Current Water Level: ${waterLevel} Ltrs.`; -// await sendNotification(fcmTokens, 'Motor Started', message); -// }); - -// eventEmitter.on('motorStart', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName, startTime, motorOnType, stopCriteria) => { -// const message = `Tank Name : '${tankName}' Pump Starts at '${startTime}' by '${motorOnType}' will stop at '${stopCriteria} mins'`; -// await sendNotification(fcmTokens, 'Arminta Water Management', message); -// }); - eventEmitter.on('motorStart', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName, startTime, motorOnType, stopCriteria) => { - try { - // Retrieve the user information - const users = await User.find({ fcmId: { $in: fcmTokens } }); - console.log("users",users) - const userNames = users.map(user => user.username).join(', '); - console.log("userNames",userNames) - - // Prepare the message - const message = `Tank Name: '${tankName}', Pump started at '${startTime}' by Initiated by user(s): ${userNames} '${motorOnType}' and will stop after '${stopCriteria}'`; - - // Send the notification - await sendNotification(fcmTokens, 'Arminta Water Management', message); - } catch (error) { - console.error('Error in motorStart event:', error); - } + const message = `Water supply from '${blockName}' to '${tankName}' started at ${startTime} by '${motorOnType}' mode and will stop after ${stopCriteria}. Current Water Level: ${waterLevel} Ltrs.`; + await sendNotification(fcmTokens, 'Motor Started', message); }); // Emit motor stop event with motorId -// eventEmitter.on('motorStop', async (fcmTokens, motorId, waterLevel, blockName, tankName, stopTime, motorOnType) => { -// const message = `MotorId '${motorId}' Water supply from '${blockName}' to '${tankName}' stopped at ${stopTime} by '${motorOnType}' mode. Current Water Level: ${waterLevel} Ltrs.`; -// await sendNotification(fcmTokens, 'Motor Stopped', message); -// }); - -eventEmitter.on('motorStop', async (fcmTokens, tankName,stopTime, motorOnType) => { - try { - // Retrieve the user information - const users = await User.find({ fcmId: { $in: fcmTokens } }); - console.log("users",users) - const userNames = users.map(user => user.username).join(', '); - console.log("userNames",userNames) - - // Prepare the message - const message = `Tank Name: '${tankName}', Pump stopped at '${stopTime}' by Initiated by user(s): ${userNames} '${motorOnType}'`; - - // Send the notification - await sendNotification(fcmTokens, 'Arminta Water Management', message); - } catch (error) { - console.error('Error in motorStart event:', error); - } +eventEmitter.on('motorStop', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName,stopTime,motorOnType) => { + const message = `Water supply from '${blockName}' to '${tankName}' stopped at ${stopTime} by '${motorOnType}' mode. Current Water Level: ${waterLevel} Ltrs.`; + await sendNotification(fcmTokens, 'Motor Stopped', message); }); - // Event listener to handle notification eventEmitter.on('sendLowWaterNotification', async (fcmToken, tankInfo) => { const message = formatWaterLevelMessage(tankInfo, 'low'); @@ -2069,50 +2027,50 @@ exports.motorAction = async (req, reply) => { const currentWaterLevel = parseInt(receiverTank.waterlevel, 10); const waterLevelThresholds = { low: 30, veryLow: 20, criticallyLow: 10 }; - // // Check if the water level is below any of the thresholds - // if (currentWaterLevel < waterLevelThresholds.criticallyLow) { - // if (!receiverTank.notificationSentCritical) { - // eventEmitter.emit('sendCriticalLowWaterNotification', fcmToken, receiverTank); - // await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCritical: true } }); - // } - // } else if (currentWaterLevel < waterLevelThresholds.veryLow) { - // if (!receiverTank.notificationSentVeryLow) { - // eventEmitter.emit('sendVeryLowWaterNotification', fcmToken, receiverTank); - // await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryLow: true } }); - // } - // } else if (currentWaterLevel < waterLevelThresholds.low) { - // if (!receiverTank.notificationSentLow) { - // eventEmitter.emit('sendLowWaterNotification', fcmToken, receiverTank); - // await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentLow: true } }); - // } - // } + // Check if the water level is below any of the thresholds + if (currentWaterLevel < waterLevelThresholds.criticallyLow) { + if (!receiverTank.notificationSentCritical) { + eventEmitter.emit('sendCriticalLowWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCritical: true } }); + } + } else if (currentWaterLevel < waterLevelThresholds.veryLow) { + if (!receiverTank.notificationSentVeryLow) { + eventEmitter.emit('sendVeryLowWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryLow: true } }); + } + } else if (currentWaterLevel < waterLevelThresholds.low) { + if (!receiverTank.notificationSentLow) { + eventEmitter.emit('sendLowWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentLow: true } }); + } + } // Check for critical high water level -// if (currentWaterLevel >= criticalHighWaterThreshold) { -// if (!receiverTank.notificationSentCriticalHigh) { -// eventEmitter.emit('sendCriticalHighWaterNotification', fcmToken, receiverTank); -// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCriticalHigh: true } }); -// } -// } -// // Check for very high water level -// else if (currentWaterLevel >= veryHighWaterThreshold) { -// if (!receiverTank.notificationSentVeryHigh) { -// eventEmitter.emit('sendVeryHighWaterNotification', fcmToken, receiverTank); -// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryHigh: true } }); -// } -// } -// // Check for high water level -// else if (currentWaterLevel >= highWaterThreshold) { -// if (!receiverTank.notificationSentHigh) { -// eventEmitter.emit('sendHighWaterNotification', fcmToken, receiverTank); -// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentHigh: true } }); -// } -// } +if (currentWaterLevel >= criticalHighWaterThreshold) { + if (!receiverTank.notificationSentCriticalHigh) { + eventEmitter.emit('sendCriticalHighWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCriticalHigh: true } }); + } +} +// Check for very high water level +else if (currentWaterLevel >= veryHighWaterThreshold) { + if (!receiverTank.notificationSentVeryHigh) { + eventEmitter.emit('sendVeryHighWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryHigh: true } }); + } +} +// Check for high water level +else if (currentWaterLevel >= highWaterThreshold) { + if (!receiverTank.notificationSentHigh) { + eventEmitter.emit('sendHighWaterNotification', fcmToken, receiverTank); + await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentHigh: true } }); + } +} // Determine the motor stop status based on the action let motorStopStatus; const blockName = req.body.from || "Unknown Block"; // Provide a fallback if `from` is missing const tankName = req.body.to || "Unknown Tank"; // Provide a fallback if `to` is missing const stopTime = req.body.stopTime || new Date().toISOString(); - const motorOnType = req.body.motor_on_type || "app"; + const motorOnType = req.body.motor_on_type || "manual"; if (action === "start") { motorStopStatus = "2"; @@ -2146,6 +2104,9 @@ exports.motorAction = async (req, reply) => { eventEmitter.emit( "motorStop", fcmToken, + motorId, + currentWaterLevel, + blockName, tankName, stopTime, motorOnType diff --git a/src/models/User.js b/src/models/User.js index a78b2167..5dce58ff 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -90,7 +90,7 @@ const userSchema = new mongoose.Schema( zip: { type: String, default: null }, notes: { type: String, default: null }, }, - + stripeCustomerId: String, stripePaymentIntentId: String, stripeSubscriptionId: String,