Untitled
unknown
plain_text
a year ago
2.9 kB
10
Indexable
exports.sendMessage = catchAsync(async (req, res, next) => {
const { content, salesMan_id, retailer_id, sender } = req.body;
if (!content) {
return next(new AppError('message is require', 400));
}
if (!retailer_id) {
return next(new AppError('retailer id is require', 400));
}
if (!salesMan_id) {
return next(new AppError('salesMan id is require', 400));
}
if (sender != 'retailer' && sender != 'salesman') {
return next(new AppError('sender is require', 400));
}
const session = await mongoose.startSession();
try {
session.startTransaction();
const retailer = await Retailer.findById(toObjectId(retailer_id, next));
if (!retailer) {
return next(new AppError('retailer not found', 400));
}
if (!retailer.sales_man) {
return next(new AppError("this retailer doesn't have a salesman", 400));
}
const salesman = await SalesMan.findById(retailer.sales_man);
if (!salesman) {
return next(new AppError('salesman not found', 400));
}
if (String(retailer.sales_man) != String(salesMan_id)) {
return next(new AppError("salesman can't chat with this retailer", 400));
}
const chat = await Chat.find({ retailer: toObjectId(retailer_id, next), sales_man: toObjectId(salesMan_id, next) });
let message;
if (sender == 'retailer') {
message = await Message.create([{ message: content, sender: retailer_id, receiver: salesMan_id }], { session });
} else {
message = await Message.create([{ message: content, sender: salesMan_id, receiver: retailer_id }], { session });
}
if (chat.length < 1) {
const newChat = await Chat.create([{ retailer: retailer._id, sales_man: retailer.sales_man }], { session });
await Chat.updateOne({ _id: newChat[0]._id }, { $push: { messages: message[0]._id } }, { session });
const users = await User.find({ profile: salesMan._id });
const usersIds = [];
for (let i = 0; i < users.length; i++) {
const notification = await Notification.create(
[{ content: 'new conversation with ' + user.name, type: 'chat' }],
{ session }
);
await User.updateOne({ _id: users[i]._id }, { $push: { notifications: notification[0]._id } }, { session });
usersIds.push({ id: users[i]._id.toString(), data: notification });
}
Socket.SocketConnectedList(usersIds);
try {
sendEmailToSalesman(users[0], user.name);
} catch (error) {}
} else {
await Chat.updateOne({ _id: chat[0]._id }, { $push: { messages: message[0]._id } }, { session });
}
await session.commitTransaction();
session.endSession();
res.status(200).json({
message: 'message successfully'
});
} catch (error) {
await session.abortTransaction();
session.endSession();
return next(error);
}
});
Editor is loading...
Leave a Comment