HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago-nodeserver-hotfixes/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;