From 5baa0b0ce3fbda706ae622119d62bca5fd54c4b5 Mon Sep 17 00:00:00 2001 From: codytseng Date: Sun, 27 Jul 2025 22:21:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=92=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/providers/NostrProvider/index.tsx | 6 ++++-- src/services/poll-results.service.ts | 30 +++++++++------------------ 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/providers/NostrProvider/index.tsx b/src/providers/NostrProvider/index.tsx index ea33b2ea..546122cf 100644 --- a/src/providers/NostrProvider/index.tsx +++ b/src/providers/NostrProvider/index.tsx @@ -72,7 +72,7 @@ type TNostrContext = { const NostrContext = createContext(undefined) -let lastPublishedSeenNotificationsAtEventAt = -1 +const lastPublishedSeenNotificationsAtEventAtMap = new Map() export const useNostr = () => { const context = useContext(NostrContext) @@ -691,12 +691,14 @@ export function NostrProvider({ children }: { children: React.ReactNode }) { }, 5_000) // Prevent too frequent requests for signing seen notifications events + const lastPublishedSeenNotificationsAtEventAt = + lastPublishedSeenNotificationsAtEventAtMap.get(account.pubkey) ?? -1 if ( lastPublishedSeenNotificationsAtEventAt < 0 || now - lastPublishedSeenNotificationsAtEventAt > 10 * 60 // 10 minutes ) { await publish(createSeenNotificationsAtDraftEvent()) - lastPublishedSeenNotificationsAtEventAt = now + lastPublishedSeenNotificationsAtEventAtMap.set(account.pubkey, now) } } diff --git a/src/services/poll-results.service.ts b/src/services/poll-results.service.ts index b15ebbde..d5b25ac5 100644 --- a/src/services/poll-results.service.ts +++ b/src/services/poll-results.service.ts @@ -12,30 +12,21 @@ export type TPollResults = { updatedAt: number } +type TFetchPollResultsParams = { + pollEventId: string + relays: string[] + validPollOptionIds: string[] + isMultipleChoice: boolean + endsAt?: number +} + class PollResultsService { static instance: PollResultsService private pollResultsMap: Map = new Map() private pollResultsSubscribers = new Map void>>() - private loader = new DataLoader< - { - pollEventId: string - relays: string[] - validPollOptionIds: string[] - isMultipleChoice: boolean - endsAt?: number - }, - TPollResults | undefined - >( + private loader = new DataLoader( async (params) => { - const pollMap = new Map< - string, - { - relays: string[] - validPollOptionIds: string[] - isMultipleChoice: boolean - endsAt?: number - } - >() + const pollMap = new Map>() params.forEach(({ pollEventId, relays, validPollOptionIds, isMultipleChoice, endsAt }) => { if (!pollMap.has(pollEventId)) { @@ -97,7 +88,6 @@ class PollResultsService { isMultipleChoice: boolean, endsAt?: number ) { - console.log('Fetching poll results for:', pollEventId) const filter: Filter = { kinds: [ExtendedKind.POLL_RESPONSE], '#e': [pollEventId],