diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-04-04 14:06:57 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-04-04 14:06:57 +0900 |
| commit | 30d699268450af375dabc2226ec4f3196a53f7f7 (patch) | |
| tree | e6e62a4b19f190d2a51e4a5281c051b6911f97a1 /packages/sw/src/scripts | |
| parent | build(#10336): Storybook & Chromatic & msw (#10365) (diff) | |
| download | sharkey-30d699268450af375dabc2226ec4f3196a53f7f7.tar.gz sharkey-30d699268450af375dabc2226ec4f3196a53f7f7.tar.bz2 sharkey-30d699268450af375dabc2226ec4f3196a53f7f7.zip | |
perf(backend): 通知をRedisに保存するように
Resolve #10168
Diffstat (limited to 'packages/sw/src/scripts')
| -rw-r--r-- | packages/sw/src/scripts/notification-read.ts | 58 |
1 files changed, 0 insertions, 58 deletions
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(); |