perf: 对话顶部提示

This commit is contained in:
kuaifan
2023-02-19 08:47:14 +08:00
parent 66f0bef271
commit 42e54d8a6e
7 changed files with 102 additions and 53 deletions

View File

@@ -1033,8 +1033,9 @@ class DialogController extends AbstractController
*
* @apiParam {Number} dialog_id 会话ID
* @apiParam {String} type 类型
* - read
* - unread
* - read: 已读
* - unread: 未读
* @apiParam {Number} [after_msg_id] 仅标记已读指定之后(含)的消息
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
@@ -1045,6 +1046,7 @@ class DialogController extends AbstractController
$user = User::auth();
$dialogId = intval(Request::input('dialog_id'));
$type = Request::input('type');
$afterMsgId = intval(Request::input('after_msg_id'));
$dialogUser = WebSocketDialogUser::whereUserid($user->userid)->whereDialogId($dialogId)->first();
if (!$dialogUser) {
return Base::retError("会话不存在");
@@ -1054,27 +1056,31 @@ class DialogController extends AbstractController
];
switch ($type) {
case 'read':
$data['mark_unread'] = 0;
$data['unread'] = 0;
$data['first_umid'] = 0;
WebSocketDialogMsgRead::whereUserid($user->userid)
->whereReadAt(null)
->whereDialogId($dialogId)
->chunkById(100, function ($list) {
WebSocketDialogMsgRead::onlyMarkRead($list);
});
$dialogUser->mark_unread = 0;
$dialogUser->save();
$data['mention'] = 0;
$builder = WebSocketDialogMsgRead::whereUserid($user->userid)->whereReadAt(null)->whereDialogId($dialogId);
if ($afterMsgId > 0) {
$unBuilder = $builder->clone()->where('msg_id', '<', $afterMsgId);
$data['unread'] = $unBuilder->count();
$data['mention'] = $data['unread'] > 0 ? $unBuilder->whereMention(1)->count() : 0;
$builder->where('msg_id', '>=', $afterMsgId);
}
$builder->chunkById(100, function ($list) {
WebSocketDialogMsgRead::onlyMarkRead($list);
});
$data['position_msgs'] = WebSocketDialog::find($dialogId)?->getPositionMsgs($user->userid) ?: [];
break;
case 'unread':
$dialogUser->mark_unread = 1;
$dialogUser->save();
$data['mark_unread'] = 1;
break;
default:
return Base::retError("参数错误");
}
$data['mark_unread'] = $dialogUser->mark_unread;
$dialogUser->mark_unread = $data['mark_unread'];
$dialogUser->save();
return Base::retSuccess("success", $data);
}