diff --git a/Controller/AthleteController.js b/Controller/AthleteController.js index fa22dbd..4676077 100644 --- a/Controller/AthleteController.js +++ b/Controller/AthleteController.js @@ -5,6 +5,8 @@ const UsersModel = require("./../Model/UsersModel"); const SportModel = require("./../Model/SportModel"); const ComplaintTypeModel = require("../Model/ComplaintTypeModel"); const ComplaintModel = require("../Model/ComplaintModel"); +const Reminder = require("../Model/Reminder"); +const { setReminder } = require("../SetReminder"); module.exports.addAthlete = async function (req, res) { //console.log(req.file); const BaseUrl = `http://localhost:9999/Athletes/${req.file.originalname}`; @@ -411,7 +413,28 @@ module.exports.goalOfAthletes = async function (req, res) { { _id: req.query.id }, { $set: { goals: Athlete.goals } } ); + // let first = new Date(goal.startdate); + // while (first < new Date(goal.targetdate)) { + // first += 86400000; + // setReminder( + // first, + // `This is reminder to complete ${goal.title}`, + // "Goal Reminder", + // [Athlete.userId] + // ); + // } + let first = new Date(goal.startdate); + + while (first.getTime() < new Date(goal.targetdate).getTime()) { + first.setTime(first.getTime() + 60000); + setReminder( + new Date(first), // Ensure you pass a new Date object to setReminder + `This is a reminder to complete ${goal.title}`, + "Goal Reminder", + [Athlete.userId] + ); + } res.json({ data: Athlete, msg: "Goals added to Athlete successfully", diff --git a/Model/Reminder.js b/Model/Reminder.js new file mode 100644 index 0000000..0a99e45 --- /dev/null +++ b/Model/Reminder.js @@ -0,0 +1,14 @@ +const mongoose = require("mongoose"); + +const reminderSchema = new mongoose.Schema({ + date: Date, + message: String, + title: String, + issent: { + type: Number, + default: 0, + }, + userIds: [{ type: mongoose.SchemaTypes.ObjectId, ref: "users" }], +}); + +module.exports = mongoose.model("reminders", reminderSchema, "reminders"); diff --git a/PushNotification.js b/PushNotification.js index 8c5399e..a4a9d10 100644 --- a/PushNotification.js +++ b/PushNotification.js @@ -8,7 +8,7 @@ module.exports.sendPushNotification = async function ( const fcmEndpoint = "https://fcm.googleapis.com/fcm/send"; const notificationMessage = { - to: userToken, + registration_ids: userToken, notification: { title, body: message, diff --git a/SetReminder.js b/SetReminder.js new file mode 100644 index 0000000..f7ab9c5 --- /dev/null +++ b/SetReminder.js @@ -0,0 +1,14 @@ +const Reminder = require("./Model/Reminder"); + +async function setReminder(date, message, title, userIds) { + let reminder = new Reminder({ + date, + message, + title, + userIds, + issent: 0, + }); + await reminder.save(); +} + +module.exports = { setReminder }; diff --git a/client-app/ipconfig.js b/client-app/ipconfig.js index 9007652..466aece 100644 --- a/client-app/ipconfig.js +++ b/client-app/ipconfig.js @@ -1 +1 @@ -export default { ip: "192.168.0.103" }; +export default { ip: "192.168.137.205" }; diff --git a/package-lock.json b/package-lock.json index c5a1b5b..7659323 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "jsonwebtoken": "^9.0.2", "mongoose": "^7.6.3", "multer": "^1.4.5-lts.1", + "node-cron": "^3.0.3", "nodemailer": "^6.9.7", "validator": "^13.11.0" } @@ -1003,6 +1004,17 @@ "node": ">= 0.6" } }, + "node_modules/node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "dependencies": { + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/nodemailer": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", @@ -1381,6 +1393,14 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", diff --git a/package.json b/package.json index 0427019..7860abd 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "jsonwebtoken": "^9.0.2", "mongoose": "^7.6.3", "multer": "^1.4.5-lts.1", + "node-cron": "^3.0.3", "nodemailer": "^6.9.7", "validator": "^13.11.0" } diff --git a/server.js b/server.js index ca47e78..2d66a5c 100644 --- a/server.js +++ b/server.js @@ -2,6 +2,7 @@ const express = require("express"); const cors = require("cors"); const multer = require("multer"); const ejs = require("ejs"); +const cron = require("node-cron"); require("./config/dbconfig").getDbConnetion(); const UserRoute = require("./Routes/UserRoutes"); @@ -39,6 +40,7 @@ const { getAuthorityComplaint, } = require("./Controller/AuthorityComplaintController"); const { sendPushNotification } = require("./PushNotification"); +const Reminder = require("./Model/Reminder"); const app = express(); //middleware @@ -263,8 +265,8 @@ app.get("/atheleteInSportsComplex", AdminController.atheleteInSportsComplex); app.post("/addSession/:id", SessionController.addSession); app.get("/getSession", SessionController.getSession); app.get("/filtersport/:id", filtersportsforcomplex); -app.patch("/updateSportsInSession",SessionController.updateSportsInSession) -app.get("/attendanceSportWise",SessionController.attendanceSportWise) +app.patch("/updateSportsInSession", SessionController.updateSportsInSession); +app.get("/attendanceSportWise", SessionController.attendanceSportWise); app.get( "/getInstructorForPayment", @@ -298,10 +300,13 @@ app.get( ); app.get("/agewiseSportCount", UtilizationController.agewiseSportCount); app.get("/agegrpCount", UtilizationController.agegrpCount); -app.get("/rating",UtilizationController.ratingWiseTop5) -app.get("/sportRatingWiseTop5",UtilizationController.sportRatingWiseTop5) -app.get("/monthWiseEventCount",UtilizationController.monthWiseEventCount) -app.get("/monthWiseComplainCount",UtilizationController.monthWiseComplainCount) +app.get("/rating", UtilizationController.ratingWiseTop5); +app.get("/sportRatingWiseTop5", UtilizationController.sportRatingWiseTop5); +app.get("/monthWiseEventCount", UtilizationController.monthWiseEventCount); +app.get( + "/monthWiseComplainCount", + UtilizationController.monthWiseComplainCount +); app.post("/remarkRatingByAthlete", async (req, res) => { let { @@ -402,5 +407,25 @@ async function averageRating(userId, sportId) { }); return total2 / total; } + +cron.schedule("*/1 * * * *", async function () { + console.log("run"); + let today = new Date(); + let reminder = await Reminder.find({ + issent: 0, + date: { $lt: today }, + }).populate({ path: "userIds", select: { notificationtoken: 1 } }); + for (let index = 0; index < reminder.length; index++) { + const element = reminder[index]; + await sendPushNotification( + element.userIds.map((ele) => ele.notificationtoken), + element.title, + element.message + ); + element.issent = 1; + element.save(); + } +}); + app.listen(9999); console.log("server started at 9999");