|
|
|
@ -12,30 +12,21 @@ export type TPollResults = { |
|
|
|
updatedAt: number |
|
|
|
updatedAt: number |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class PollResultsService { |
|
|
|
type TFetchPollResultsParams = { |
|
|
|
static instance: PollResultsService |
|
|
|
|
|
|
|
private pollResultsMap: Map<string, TPollResults> = new Map() |
|
|
|
|
|
|
|
private pollResultsSubscribers = new Map<string, Set<() => void>>() |
|
|
|
|
|
|
|
private loader = new DataLoader< |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
pollEventId: string |
|
|
|
pollEventId: string |
|
|
|
relays: string[] |
|
|
|
relays: string[] |
|
|
|
validPollOptionIds: string[] |
|
|
|
validPollOptionIds: string[] |
|
|
|
isMultipleChoice: boolean |
|
|
|
isMultipleChoice: boolean |
|
|
|
endsAt?: number |
|
|
|
endsAt?: number |
|
|
|
}, |
|
|
|
|
|
|
|
TPollResults | undefined |
|
|
|
|
|
|
|
>( |
|
|
|
|
|
|
|
async (params) => { |
|
|
|
|
|
|
|
const pollMap = new Map< |
|
|
|
|
|
|
|
string, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
relays: string[] |
|
|
|
|
|
|
|
validPollOptionIds: string[] |
|
|
|
|
|
|
|
isMultipleChoice: boolean |
|
|
|
|
|
|
|
endsAt?: number |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
>() |
|
|
|
|
|
|
|
|
|
|
|
class PollResultsService { |
|
|
|
|
|
|
|
static instance: PollResultsService |
|
|
|
|
|
|
|
private pollResultsMap: Map<string, TPollResults> = new Map() |
|
|
|
|
|
|
|
private pollResultsSubscribers = new Map<string, Set<() => void>>() |
|
|
|
|
|
|
|
private loader = new DataLoader<TFetchPollResultsParams, TPollResults | undefined>( |
|
|
|
|
|
|
|
async (params) => { |
|
|
|
|
|
|
|
const pollMap = new Map<string, Omit<TFetchPollResultsParams, 'pollEventId'>>() |
|
|
|
|
|
|
|
|
|
|
|
params.forEach(({ pollEventId, relays, validPollOptionIds, isMultipleChoice, endsAt }) => { |
|
|
|
params.forEach(({ pollEventId, relays, validPollOptionIds, isMultipleChoice, endsAt }) => { |
|
|
|
if (!pollMap.has(pollEventId)) { |
|
|
|
if (!pollMap.has(pollEventId)) { |
|
|
|
@ -97,7 +88,6 @@ class PollResultsService { |
|
|
|
isMultipleChoice: boolean, |
|
|
|
isMultipleChoice: boolean, |
|
|
|
endsAt?: number |
|
|
|
endsAt?: number |
|
|
|
) { |
|
|
|
) { |
|
|
|
console.log('Fetching poll results for:', pollEventId) |
|
|
|
|
|
|
|
const filter: Filter = { |
|
|
|
const filter: Filter = { |
|
|
|
kinds: [ExtendedKind.POLL_RESPONSE], |
|
|
|
kinds: [ExtendedKind.POLL_RESPONSE], |
|
|
|
'#e': [pollEventId], |
|
|
|
'#e': [pollEventId], |
|
|
|
|