try {
const {message} = req.body;
const receiverId = req.params.id;
const senderId = req.user._id;
console.log(`Sender: ${senderId}, Receiver: ${receiverId},, Message" ${message}`);
let conversation = await Conversation.findOne({
participants: { $all : [senderId, receiverId]}
})
//send 1st time
if(!conversation){
conversation = await Conversation.create({
participants: [senderId,receiverId],
})
}
const newMessage = new Message({
senderId,
receiverId,
message
})
if(newMessage){
conversation.messages.push(newMessage._id);
}
// await conversation.save();
// await newMessage.save();
//optimize the upper 2 line
await Promise.all([conversation.save(), newMessage.save()])//this will run in parallel
//Socket IO
const receiverSocketId = getReceiverSocketId(receiverId);
if (receiverSocketId) {
// io.to(<socket_id>).emit() used to send events to specific client
io.to(receiverSocketId).emit("newMessage", newMessage);
}
// console.log("newMessage", newMessage);
res.status(201).json(newMessage)
} catch (error) {
console.log("Error in send Message Route", error);
res.status(500).send({
success:false,
message: error.message
})
}
const conversation = await Conversation .findOne({
participants:{$all : [senderId,userToChatId]},
}).populate("messages")//not ref but actual message
if(!conversation){
return res.status(200).send({
success:true,
message: [],
})
}
const messages = conversation.messages
res.status(200).send({
success:true,
message: messages
})
} catch (error) {
console.log("Error in Get Message Route", error);
res.status(500).send({
success:false,
message: error.message
})
}