const { Supplier, FriendRequest } = require('../models/supplier'); const { User } = require('../models/User') const boom = require("boom"); const fastify = require("fastify")({ logger: true, }); // const moment = require('moment'); const moment = require('moment-timezone'); // Set the timezone of the server moment.tz.setDefault('Asia/Kolkata'); const schedule = require('node-schedule'); // Handle friend request creation // exports.friendRequest = async (request, reply) => { // try { // // const { senderId, receiverId } = request.body; // const customerId = request.body.customerId; // const supplierId = request.body.supplierId; // // Check if the sender and receiver exist in the database // // const sender = await User.findById(senderId); // // const receiver = await Supplier.findById(receiverId); // // console.log("sender" , sender) // // console.log("receiver" , receiver) // const sender = await User.findOne({ customerId : customerId}); // const receiver = await Supplier.findOne({ supplierId : supplierId}); // console.log("sender" , sender.customerId) // console.log("receiver" , receiver.supplierId) // if (!sender || !receiver) { // throw new Error('Sender or receiver not found'); // } // // Check if a friend request already exists between the two users // // const existingRequest = await FriendRequest.findOne({ sender: senderId, receiver: receiverId }); // const existingRequest = await FriendRequest.findOne({ customerId: sender.customerId, supplierId: receiver.supplierId}); // console.log(existingRequest, " .. exist") // if (existingRequest) { // throw new Error('Friend request already sent'); // } // const friendRequest = new FriendRequest({ customerId: sender.customerId, supplierId: receiver.supplierId}); // // // Create a new friend request // // const friendRequest = new FriendRequest({ // // sender: senderId, // // receiver: receiverId // // }); // await friendRequest.save(); // console.log("friendRequest", friendRequest) // reply.send({ timestamp: friendRequest.timestamp, message: 'Friend request sent' }); // } catch (err) { // reply.status(400).send({ error: err.message }); // } // }; // exports.friendRequest = async (request, reply) => { // try { // const customerId = request.body.customerId; // const supplierId = request.body.supplierId; // const sender = await User.findOne({ customerId: customerId }); // const receiver = await Supplier.findOne({ supplierId: supplierId }); // if (!sender || !receiver) { // throw new Error('Sender or receiver not found'); // } // const existingRequest = await FriendRequest.findOne({ customerId: sender.customerId, supplierId: receiver.supplierId}); // if (existingRequest) { // throw new Error('Friend request already sent'); // } // const timestamp = moment().format('MM/DD/YYYY, hh:mm:ss A'); // const friendRequest = new FriendRequest({ // customerId: sender.customerId, // supplierId: receiver.supplierId, // timestamp: timestamp // }); // await friendRequest.save(); // // Schedule the request to be sent again in 5 hours // const rule = new schedule.RecurrenceRule(); // rule.hour = new schedule.Range(0, 23, 5); // Run every 5 hours // schedule.scheduleJob(rule, async function() { // const newTimestamp = moment().format('MM/DD/YYYY, hh:mm:ss A'); // const newFriendRequest = new FriendRequest({ // customerId: sender.customerId, // supplierId: receiver.supplierId, // timestamp: newTimestamp // }); // await newFriendRequest.save(); // }); // reply.send({ timestamp: friendRequest.timestamp, message: 'Friend request sent' }); // } catch (err) { // reply.status(400).send({ error: err.message }); // } // }; // exports.friendRequest = async (request, reply) => { // try { // const customerId = request.body.customerId; // const supplierId = request.body.supplierId; // const sender = await User.findOne({ customerId: customerId }); // const receiver = await Supplier.findOne({ supplierId: supplierId }); // if (!sender || !receiver) { // throw new Error('Sender or receiver not found'); // } // const existingRequest = await FriendRequest.findOne({ customerId: sender.customerId, supplierId: receiver.supplierId}); // if (existingRequest) { // existingRequest.timestamp = moment().format("DD-MM-YYYY hh:mm:ss") // await existingRequest.save(); // reply.send({ timestamp: existingRequest.timestamp, message: 'Friend request sent again' }); // } else { // const timestamp = moment().format("DD-MM-YYYY hh:mm:ss") // const friendRequest = new FriendRequest({ // customerId: sender.customerId, // supplierId: receiver.supplierId, // timestamp: timestamp // }); // await friendRequest.save(); // // Schedule the request to be sent again in 5 hours // const rule = new schedule.RecurrenceRule(); // rule.hour = new schedule.Range(0, 23, 5); // Run every 5 hours // schedule.scheduleJob(rule, async function() { // const newTimestamp = moment().format("DD-MM-YYYY hh:mm:ss") // const newFriendRequest = new FriendRequest({ // customerId: sender.customerId, // supplierId: receiver.supplierId, // timestamp: newTimestamp // }); // await newFriendRequest.save(); // }); // reply.send({ timestamp: friendRequest.timestamp, message: 'Friend request sent' }); // } // } catch (err) { // reply.status(400).send({ error: err.message }); // } // }; exports.friendRequest = async (request, reply) => { try { const customerId = request.body.customerId; const supplierId = request.body.supplierId; const sender = await User.findOne({ customerId: customerId }); const receiver = await Supplier.findOne({ supplierId: supplierId }); if (!sender || !receiver) { throw new Error('Sender or receiver not found'); } const existingRequest = await FriendRequest.findOne({ customerId: sender.customerId, supplierId: receiver.supplierId}); if (existingRequest) { existingRequest.timestamp = moment().tz('Asia/Kolkata').format("DD-MM-YYYY hh:mm:ss"); await existingRequest.save(); reply.send({ timestamp: existingRequest.timestamp, message: 'Friend request sent again' }); } else { const timestamp = moment().tz('Asia/Kolkata').format("DD-MM-YYYY hh:mm:ss"); const friendRequest = new FriendRequest({ customerId: sender.customerId, supplierId: receiver.supplierId, timestamp: timestamp }); await friendRequest.save(); // Schedule the request to be sent again in 5 hours const rule = new schedule.RecurrenceRule(); rule.hour = new schedule.Range(0, 23, 5); // Run every 5 hours schedule.scheduleJob(rule, async function() { const timestamp = moment().tz('Asia/Kolkata').format("DD-MM-YYYY hh:mm:ss"); const newFriendRequest = new FriendRequest({ customerId: sender.customerId, supplierId: receiver.supplierId, timestamp: timestamp }); await newFriendRequest.save(); }); reply.send({ timestamp: friendRequest.timestamp, message: 'Friend request sent' }); } } catch (err) { reply.status(400).send({ error: err.message }); } }; // Handle friend request acceptance exports.friendRequestAccept = async (request, reply) => { try { //const {friendRequestId} = request.body; const {supplierId,customerId} = request.body; // Update the friend request status to 'accepted' // const friendRequest = await FriendRequest.findByIdAndUpdate(friendRequestId, { status: 'accepted' }); const friendRequest = await FriendRequest.findOneAndUpdate({supplierId,customerId }, { status: 'accepted' }); console.log("friendRequest....---", friendRequest) if (!friendRequest) { throw new Error('Friend request not found'); } reply.send({ message: 'Friend request accepted' }); } catch (err) { reply.status(400).send({ error: err.message }); } }; // Handle friend request rejection exports.friendRequestReject = async (request, reply) => { try { //const {friendRequestId} = request.body; const {supplierId, customerId} = request.body; // Update the friend request status to 'rejected' // const friendRequest = await FriendRequest.findByIdAndUpdate(friendRequestId, { status: 'rejected' }); const friendRequest = await FriendRequest.findOneAndUpdate({supplierId, customerId}, { status: 'rejected' }); console.log("friendRequest....---", friendRequest) if (!friendRequest) { throw new Error('Friend request not found'); } reply.send({ message: 'Friend request rejected' }); } catch (err) { reply.status(400).send({ error: err.message }); } };