File: /var/www/api.javaapp.co.uk/src/helper/schedule.js
import GroupCoffeeRun from "../models/group_coffee_run.model.js";
import User from "../models/users.model.js";
import moment from "moment/moment.js";
import scheduleJob from "node-schedule";
import { messages } from "../config/response.messages.js";
import firebaseAdmin from "./firebase/firebase_admin.js";
import NotificationList from "../models/notification_list.model.js";
import { Op } from "sequelize";
const schedule = {};
schedule.createSchedule = async function (data) {
try {
const exactTime = moment.unix(data.time);
const scheduleId = Math.floor(Math.random() * 1000);
scheduleJob.scheduleJob(`${scheduleId}`, exactTime.toDate(), async () => {
const usersGroupCoffeeRun = await GroupCoffeeRun.findAll({
attributes: ["id", "group_id", "user_id"],
where: {
request_unique_id: data.coffeeRunId,
user_id: data.sender_id,
},
include: [
{
model: User,
as: "user_data",
attributes: ["id", "fcm_token"],
where: {
notification_status: 1,
}
}
]
});
const scheduledNotifications = usersGroupCoffeeRun
.map((e) => {
return {
sender_id: data.sender_id,
receiver_id: e.dataValues.user_data.dataValues.id,
reference_id: data.reference_id,
notification_type: 6,
is_read: 0,
created_at: moment().unix(),
updated_at: moment().unix(),
};
});
await NotificationList.bulkCreate(scheduledNotifications);
const tokens = usersGroupCoffeeRun
.filter((e) => e && e.dataValues.user_data.dataValues.fcm_token)
.map((e) => e.dataValues.user_data.dataValues.fcm_token);
if (tokens.length == 0) {
console.log("No tokens available");
return;
}
const payload = {
tokens: tokens,
title: messages.schedule_notification_title,
body: messages.schedule_notification_body,
notification_type: `6`,
data: {
"group_id": `${usersGroupCoffeeRun[0].dataValues.group_id}`,
}
};
await firebaseAdmin.sendNotification(payload);
});
} catch (e) {
throw e;
}
};
export default schedule;