聊天:整理最近私聊的更新逻辑
This commit is contained in:
@@ -80,6 +80,27 @@ async function createGroupMsgData(roleId: string, roleName: string, channel: str
|
|||||||
return result;
|
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 数据库中创建私聊数据
|
* @description 数据库中创建私聊数据
|
||||||
* @export
|
* @export
|
||||||
@@ -96,22 +117,8 @@ export async function createPrivateMsg(roleId: string, roleName: string, type: n
|
|||||||
const result: PrivateMessageType = await PrivateMessageModel.createMsg(msgData);
|
const result: PrivateMessageType = await PrivateMessageModel.createMsg(msgData);
|
||||||
|
|
||||||
const curTime = new Date();
|
const curTime = new Date();
|
||||||
const { recentPrivateChats: senderRecentChats } = await ChatInfoModel.findInfo(roleId);
|
await updateRecentChats(true, roleId, targetRoleId, curTime);
|
||||||
const senderRecIdx = senderRecentChats.findIndex(chat => { return chat.targetRoleId === targetRoleId });
|
await updateRecentChats(false, targetRoleId, roleId, curTime);
|
||||||
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});
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user