feat: batch fetch user percentiles
This commit is contained in:
@@ -3,28 +3,28 @@ import DataLoader from 'dataloader'
|
|||||||
class FayanService {
|
class FayanService {
|
||||||
static instance: FayanService
|
static instance: FayanService
|
||||||
|
|
||||||
private userPercentileDataLoader = new DataLoader<string, number | null>(async (userIds) => {
|
private userPercentileDataLoader = new DataLoader<string, number | null>(
|
||||||
return await Promise.all(
|
async (pubkeys) => {
|
||||||
userIds.map(async (userId) => {
|
try {
|
||||||
try {
|
const res = await fetch(`https://fayan.jumble.social/users`, {
|
||||||
const res = await fetch(`https://fayan.jumble.social/${userId}`)
|
method: 'POST',
|
||||||
if (!res.ok) {
|
headers: {
|
||||||
if (res.status === 404) {
|
'Content-Type': 'application/json'
|
||||||
return 0
|
},
|
||||||
}
|
body: JSON.stringify({ pubkeys })
|
||||||
return null
|
})
|
||||||
}
|
if (!res.ok) {
|
||||||
const data = await res.json()
|
return new Array(pubkeys.length).fill(null)
|
||||||
if (typeof data.percentile === 'number') {
|
|
||||||
return data.percentile
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
} catch {
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
})
|
const data = await res.json()
|
||||||
)
|
console.log('FayanService fetched user percentiles:', data)
|
||||||
})
|
return pubkeys.map((pubkey) => data[pubkey] ?? null)
|
||||||
|
} catch {
|
||||||
|
return new Array(pubkeys.length).fill(null)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ maxBatchSize: 50 }
|
||||||
|
)
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
if (!FayanService.instance) {
|
if (!FayanService.instance) {
|
||||||
|
|||||||
Reference in New Issue
Block a user