From 30d699268450af375dabc2226ec4f3196a53f7f7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 4 Apr 2023 14:06:57 +0900 Subject: perf(backend): 通知をRedisに保存するように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve #10168 --- packages/sw/src/scripts/notification-read.ts | 58 ---------------------------- 1 file changed, 58 deletions(-) delete mode 100644 packages/sw/src/scripts/notification-read.ts (limited to 'packages/sw/src/scripts') diff --git a/packages/sw/src/scripts/notification-read.ts b/packages/sw/src/scripts/notification-read.ts deleted file mode 100644 index 3b1dde0cd5..0000000000 --- a/packages/sw/src/scripts/notification-read.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { get } from 'idb-keyval'; -import { pushNotificationDataMap } from '@/types'; -import { api } from '@/scripts/operations'; - -type Accounts = { - [x: string]: { - queue: string[], - timeout: number | null - } -}; - -class SwNotificationReadManager { - private accounts: Accounts = {}; - - public async construct() { - const accounts = await get('accounts'); - if (!accounts) Error('Accounts are not recorded'); - - this.accounts = accounts.reduce((acc, e) => { - acc[e.id] = { - queue: [], - timeout: null - }; - return acc; - }, {} as Accounts); - - return this; - } - - // プッシュ通知の既読をサーバーに送信 - public async read(data: pushNotificationDataMap[keyof pushNotificationDataMap]) { - if (data.type !== 'notification' || !(data.userId in this.accounts)) return; - - const account = this.accounts[data.userId]; - - account.queue.push(data.body.id as string); - - if (account.queue.length >= 20) { - if (account.timeout) clearTimeout(account.timeout); - const notificationIds = account.queue; - account.queue = []; - await api('notifications/read', data.userId, { notificationIds }); - return; - } - - // 最後の呼び出しから200ms待ってまとめて処理する - if (account.timeout) clearTimeout(account.timeout); - account.timeout = setTimeout(() => { - account.timeout = null; - - const notificationIds = account.queue; - account.queue = []; - api('notifications/read', data.userId, { notificationIds }); - }, 200); - } -} - -export const swNotificationRead = (new SwNotificationReadManager()).construct(); -- cgit v1.2.3-freya