-
- ImPrivateMessageServiceImplTest 用 getFriendState 替换已删除的 isFriend mock;返回 ImFriendStateEnum.FRIEND / NONE - ImFriendServiceImplTest 删 stale 测试(isFriend / addFriend / deleteFriend 二参版本均已不存在);addFriend0 测试参数补齐 null displayName / addSource 凑齐 4 参签名 - 修复后 mvn -pl yudao-module-im test-compile 通过 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
…ore/组件/管理后台),为后续 mute 禁言功能腾出词族
-
私聊已读语义在 message.status 字段翻转,离线期间错过的 RECEIPT 推送没法 重放(与群聊不同——群聊已读在 message.readCount / receiptStatus 字段自带)。 新增此接口:客户端进入私聊会话或断线重连后,拿到对方已读到我发的最大消息 id,按 id <= maxReadId 翻转本地自发消息状态。 实现: - mapper 用 order by id desc + LIMIT 1 命中 (sender_id, receiver_id) 索引,无 max() 聚合开销; - 对方一条都没读过时返回 null(不做 0 兜底,避免与真实 id 混淆); - 补齐 hit / miss 两个单测。
-
原 readPrivateMessages 走 select-then-update 两步:先按 status=UNREAD 查未读,再按 id in 翻转,maxReadId 取已 update 行的 max(id)。该实现 有两个问题: 1. select 与 update 之间到达的消息会被一并标 READ,但 maxReadId 取的 是 select 时刻的最大值,对方端拿到的「已读到哪条」语义偏弱,前端按 maxReadId 卡边界时也会与实际状态错位。 2. 接口与群聊 readGroupMessages(userId, groupId, messageId) 不对称。 改造: - 接口签名增加 messageId(已读位置,含),与群聊接口对齐; - mapper 替换为单条 update SQL:id <= messageId AND status=UNREAD 直接 翻转,消除两步竞态窗口; - READ / RECEIPT 推送的已读位置直接采用前端上报的 messageId; - 落地 ImPrivateMessageServiceImpl 原 TODO; - 同步更新 testReadMessages_success / testReadMessages_noUnread。
-
2. 优化 trace 相关的逻辑
-
Conflicts: src/test/resources/sql/clean.sql src/test/resources/sql/create_tables.sql
-
Conflicts: src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
-
完成 YunpianSmsClient 的单元测试