聊天:整理最近私聊的更新逻辑
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user