聊天:整理最近私聊的更新逻辑

This commit is contained in:
liangtongchuan
2021-03-10 23:47:48 +08:00
parent 7a3c914ea0
commit 9a2c536288

View File

@@ -80,6 +80,27 @@ async function createGroupMsgData(roleId: string, roleName: string, channel: str
return result;
}
function createChatRec(sender: boolean, curTime: Date, targetRoleId) {
const result: PrivateChatRec = {
// 接收者没有阅读时间
targetRoleId, lastChatTime: curTime, lastReadTime: sender ? curTime : null
};
return result;
}
async function updateRecentChats(sender: boolean, roleId: string, targetRoleId: string, curTime: Date) {
const { recentPrivateChats } = await ChatInfoModel.findInfo(roleId);
const recIdx = recentPrivateChats.findIndex(chat => { return chat.targetRoleId === targetRoleId });
if (recIdx === -1) {
recentPrivateChats.push(createChatRec(sender, curTime, targetRoleId));
} else {
recentPrivateChats[recIdx].lastChatTime = curTime;
// 发送者的最后阅读时间也更新
recentPrivateChats[recIdx].lastReadTime = sender ? curTime : recentPrivateChats[recIdx].lastReadTime;
}
await ChatInfoModel.updateInfo({ roleId, recentPrivateChats});
}
/**
* @description 数据库中创建私聊数据
* @export
@@ -96,22 +117,8 @@ export async function createPrivateMsg(roleId: string, roleName: string, type: n
const result: PrivateMessageType = await PrivateMessageModel.createMsg(msgData);
const curTime = new Date();
const { recentPrivateChats: senderRecentChats } = await ChatInfoModel.findInfo(roleId);
const senderRecIdx = senderRecentChats.findIndex(chat => { return chat.targetRoleId === targetRoleId });
const newSenderRec: PrivateChatRec = {
targetRoleId, lastChatTime: curTime, lastReadTime: curTime
};
senderRecIdx === -1 ? senderRecentChats.push(newSenderRec) : senderRecentChats[senderRecIdx] = newSenderRec;
await ChatInfoModel.updateInfo({ roleId, recentPrivateChats: senderRecentChats});
const { recentPrivateChats: receiverRecentChats } = await ChatInfoModel.findInfo(targetRoleId);
const receiverRecIdx = receiverRecentChats.findIndex(chat => { return chat.targetRoleId === roleId });
const newReceiverRec: PrivateChatRec = {
targetRoleId: roleId, lastChatTime: curTime, lastReadTime: curTime
};
receiverRecIdx === -1 ? receiverRecentChats.push(newReceiverRec) : receiverRecentChats[receiverRecIdx].lastChatTime = curTime;
await ChatInfoModel.updateInfo({ roleId: targetRoleId, recentPrivateChats: receiverRecentChats});
await updateRecentChats(true, roleId, targetRoleId, curTime);
await updateRecentChats(false, targetRoleId, roleId, curTime);
return result;
}