fix(backend): フォローリクエストの通知が残る問題を修正

Fix #10611
This commit is contained in:
syuilo 2023-05-02 12:14:06 +09:00
parent e9ba896431
commit 8dc5edde76
2 changed files with 14 additions and 1 deletions

View file

@ -30,6 +30,7 @@
* デフォルトがオフになるので、ロールタイムラインを表示する場合はオンにしてください。 * デフォルトがオフになるので、ロールタイムラインを表示する場合はオンにしてください。
- カスタム絵文字のライセンスを複数でセットできるようになりました。 - カスタム絵文字のライセンスを複数でセットできるようになりました。
- 管理者が予約ユーザー名を設定できるようになりました。 - 管理者が予約ユーザー名を設定できるようになりました。
- フォローリクエストの通知が残る問題を修正
### Client ### Client
- 通知の表示をカスタマイズできるように - 通知の表示をカスタマイズできるように

View file

@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core'; import { ModuleRef } from '@nestjs/core';
import { In } from 'typeorm'; import { In } from 'typeorm';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import type { AccessTokensRepository, NoteReactionsRepository, NotesRepository, User, UsersRepository } from '@/models/index.js'; import type { AccessTokensRepository, FollowRequestsRepository, NoteReactionsRepository, NotesRepository, User, UsersRepository } from '@/models/index.js';
import { awaitAll } from '@/misc/prelude/await-all.js'; import { awaitAll } from '@/misc/prelude/await-all.js';
import type { Notification } from '@/models/entities/Notification.js'; import type { Notification } from '@/models/entities/Notification.js';
import type { Note } from '@/models/entities/Note.js'; import type { Note } from '@/models/entities/Note.js';
@ -35,6 +35,9 @@ export class NotificationEntityService implements OnModuleInit {
@Inject(DI.noteReactionsRepository) @Inject(DI.noteReactionsRepository)
private noteReactionsRepository: NoteReactionsRepository, private noteReactionsRepository: NoteReactionsRepository,
@Inject(DI.followRequestsRepository)
private followRequestsRepository: FollowRequestsRepository,
@Inject(DI.accessTokensRepository) @Inject(DI.accessTokensRepository)
private accessTokensRepository: AccessTokensRepository, private accessTokensRepository: AccessTokensRepository,
@ -131,6 +134,15 @@ export class NotificationEntityService implements OnModuleInit {
}); });
const packedUsers = new Map(packedUsersArray.map(p => [p.id, p])); const packedUsers = new Map(packedUsersArray.map(p => [p.id, p]));
// 既に解決されたフォローリクエストの通知を除外
const followRequestNotifications = validNotifications.filter(x => x.type === 'receiveFollowRequest');
if (followRequestNotifications.length > 0) {
const reqs = await this.followRequestsRepository.find({
where: { followerId: In(followRequestNotifications.map(x => x.notifierId!)) },
});
validNotifications = validNotifications.filter(x => (x.type !== 'receiveFollowRequest') || reqs.some(r => r.followerId === x.notifierId));
}
return await Promise.all(validNotifications.map(x => this.pack(x, meId, {}, { return await Promise.all(validNotifications.map(x => this.pack(x, meId, {}, {
packedNotes, packedNotes,
packedUsers, packedUsers,