From f5ae6630bdd0b4a6801a3407a9eb3c3de732c425 Mon Sep 17 00:00:00 2001 From: taichan Date: Tue, 20 Feb 2024 15:36:30 +0900 Subject: [PATCH] =?UTF-8?q?Refactor:=20=E5=88=A4=E5=AE=9A=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=82=92=E5=85=B1=E9=80=9A=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entities/NotificationEntityService.ts | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/backend/src/core/entities/NotificationEntityService.ts b/packages/backend/src/core/entities/NotificationEntityService.ts index 8f74eb8024..16451790dd 100644 --- a/packages/backend/src/core/entities/NotificationEntityService.ts +++ b/packages/backend/src/core/entities/NotificationEntityService.ts @@ -297,20 +297,14 @@ export class NotificationEntityService implements OnModuleInit { } /** - * notifierが存在するか、ミュートされていないか、サスペンドされていないかを確認する + * notifierが存在するか、ミュートされていないか、サスペンドされていないかを確認するvalidator */ - async #isValidNotifier ( + async #validateNotifier ( notification: T, meId: MiUser['id'], - ) : Promise { - const [ - userIdsWhoMeMuting, - userMutedInstances, - ] = await Promise.all([ - this.cacheService.userMutingsCache.fetch(meId), - this.cacheService.userProfileCache.fetch(meId).then(p => new Set(p.mutedInstances)), - ]); - + userIdsWhoMeMuting: Set, + userMutedInstances: Set, + ): Promise { if (!('notifierId' in notification)) return true; if (userIdsWhoMeMuting.has(notification.notifierId)) return false; @@ -324,7 +318,25 @@ export class NotificationEntityService implements OnModuleInit { } /** - * notifierが存在するか、ミュートされていないか、サスペンドされていないかを複数確認する + * notifierが存在するか、ミュートされていないか、サスペンドされていないかを実際に確認する + */ + async #isValidNotifier ( + notification: T, + meId: MiUser['id'], + ) : Promise { + const [ + userIdsWhoMeMuting, + userMutedInstances, + ] = await Promise.all([ + this.cacheService.userMutingsCache.fetch(meId), + this.cacheService.userProfileCache.fetch(meId).then(p => new Set(p.mutedInstances)), + ]); + + return this.#validateNotifier(notification, meId, userIdsWhoMeMuting, userMutedInstances); + } + + /** + * notifierが存在するか、ミュートされていないか、サスペンドされていないかを実際に複数確認する */ async #filterValidNotifier ( notifications: T[], @@ -339,16 +351,8 @@ export class NotificationEntityService implements OnModuleInit { ]); const filteredNotifications = ((await Promise.all(notifications.map(async (notification) => { - if (!('notifierId' in notification)) return notification; - if (userIdsWhoMeMuting.has(notification.notifierId)) return null; - - const notifier = await this.usersRepository.findOneBy({ id: notification.notifierId }); - if (notifier === null) return null; - if (notifier.host && userMutedInstances.has(notifier.host)) return null; - - if (notifier.isSuspended) return null; - - return notification; + const isValid = await this.#validateNotifier(notification, meId, userIdsWhoMeMuting, userMutedInstances); + return isValid ? notification : null; }))) as [T|null] ).filter((notification): notification is T => notification !== null); return filteredNotifications;