summaryrefslogtreecommitdiff
path: root/packages/sw/src/scripts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-04-04 14:06:57 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-04-04 14:06:57 +0900
commit30d699268450af375dabc2226ec4f3196a53f7f7 (patch)
treee6e62a4b19f190d2a51e4a5281c051b6911f97a1 /packages/sw/src/scripts
parentbuild(#10336): Storybook & Chromatic & msw (#10365) (diff)
downloadsharkey-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.ts58
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();