bigbluebutton-Github/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/syncMeetingChatMsgs.js

50 lines
1.2 KiB
JavaScript

import { Match, check } from 'meteor/check';
import flat from 'flat';
import { GroupChatMsg } from '/imports/api/group-chat-msg';
import Logger from '/imports/startup/server/logger';
import { parseMessage } from './addGroupChatMsg';
export default function syncMeetingChatMsgs(meetingId, chatId, msgs) {
if (!msgs.length) return;
check(meetingId, String);
check(chatId, String);
check(msgs, Match.Maybe(Array));
try {
const bulkOperations = GroupChatMsg.rawCollection().initializeOrderedBulkOp();
msgs
.forEach((msg) => {
const {
sender,
...restMsg
} = msg;
const msgToSync = {
...restMsg,
meetingId,
chatId,
message: parseMessage(msg.message),
sender: sender.id,
};
const modifier = flat(msgToSync, { safe: true });
bulkOperations
.find({ chatId, meetingId, id: msg.id })
.upsert()
.updateOne({
$setOnInsert: { _id: new Mongo.ObjectID()._str },
$set: { ...modifier },
});
});
bulkOperations.execute();
Logger.info('Chat messages synchronized', { chatId, meetingId });
} catch (err) {
Logger.error(`Error on sync chat messages: ${err}`);
}
}