summaryrefslogtreecommitdiff
path: root/packages/backend/src/core
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-05-09 20:12:33 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-05-09 20:12:33 +0900
commit1febae712872c3a2e1afde34025ec7092a6b6e03 (patch)
treee50d0ff33242d316aa1de03bf94eb95c2793fdce /packages/backend/src/core
parentNew Crowdin updates (#15969) (diff)
downloadmisskey-1febae712872c3a2e1afde34025ec7092a6b6e03.tar.gz
misskey-1febae712872c3a2e1afde34025ec7092a6b6e03.tar.bz2
misskey-1febae712872c3a2e1afde34025ec7092a6b6e03.zip
fix(backend): チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
Diffstat (limited to 'packages/backend/src/core')
-rw-r--r--packages/backend/src/core/ChatService.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/packages/backend/src/core/ChatService.ts b/packages/backend/src/core/ChatService.ts
index 9d294a80cb..2ceff341cc 100644
--- a/packages/backend/src/core/ChatService.ts
+++ b/packages/backend/src/core/ChatService.ts
@@ -578,6 +578,20 @@ export class ChatService {
@bindThis
public async deleteRoom(room: MiChatRoom, deleter?: MiUser) {
+ const memberships = (await this.chatRoomMembershipsRepository.findBy({ roomId: room.id })).map(m => ({
+ userId: m.userId,
+ })).concat({ // ownerはmembershipレコードを作らないため
+ userId: room.ownerId,
+ });
+
+ // 未読フラグ削除
+ const redisPipeline = this.redisClient.pipeline();
+ for (const membership of memberships) {
+ redisPipeline.del(`newRoomChatMessageExists:${membership.userId}:${room.id}`);
+ redisPipeline.srem(`newChatMessagesExists:${membership.userId}`, `room:${room.id}`);
+ }
+ await redisPipeline.exec();
+
await this.chatRoomsRepository.delete(room.id);
if (deleter) {
@@ -709,6 +723,12 @@ export class ChatService {
public async leaveRoom(userId: MiUser['id'], roomId: MiChatRoom['id']) {
const membership = await this.chatRoomMembershipsRepository.findOneByOrFail({ roomId, userId });
await this.chatRoomMembershipsRepository.delete(membership.id);
+
+ // 未読フラグを消す (「既読にする」というわけでもないのでreadメソッドは使わないでおく)
+ const redisPipeline = this.redisClient.pipeline();
+ redisPipeline.del(`newRoomChatMessageExists:${userId}:${roomId}`);
+ redisPipeline.srem(`newChatMessagesExists:${userId}`, `room:${roomId}`);
+ await redisPipeline.exec();
}
@bindThis