fix(backend): チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
This commit is contained in:
parent
2c63ab6fe3
commit
1febae7128
|
@ -17,6 +17,7 @@
|
||||||
- Enhance: メモリ使用量を軽減しました
|
- Enhance: メモリ使用量を軽減しました
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
|
- Fix: チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
|
||||||
- Fix: ユーザ除外アンテナをインポートできない問題を修正
|
- Fix: ユーザ除外アンテナをインポートできない問題を修正
|
||||||
- Fix: アンテナのセンシティブなチャンネルのノートを含むかどうかの情報がエクスポートされない問題を修正
|
- Fix: アンテナのセンシティブなチャンネルのノートを含むかどうかの情報がエクスポートされない問題を修正
|
||||||
|
|
||||||
|
|
|
@ -578,6 +578,20 @@ export class ChatService {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async deleteRoom(room: MiChatRoom, deleter?: MiUser) {
|
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);
|
await this.chatRoomsRepository.delete(room.id);
|
||||||
|
|
||||||
if (deleter) {
|
if (deleter) {
|
||||||
|
@ -709,6 +723,12 @@ export class ChatService {
|
||||||
public async leaveRoom(userId: MiUser['id'], roomId: MiChatRoom['id']) {
|
public async leaveRoom(userId: MiUser['id'], roomId: MiChatRoom['id']) {
|
||||||
const membership = await this.chatRoomMembershipsRepository.findOneByOrFail({ roomId, userId });
|
const membership = await this.chatRoomMembershipsRepository.findOneByOrFail({ roomId, userId });
|
||||||
await this.chatRoomMembershipsRepository.delete(membership.id);
|
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
|
@bindThis
|
||||||
|
|
Loading…
Reference in New Issue