feat: batch fetch user percentiles

This commit is contained in:
codytseng
2025-12-22 22:34:29 +08:00
parent ef6d44d112
commit cd7c52eda0

View File

@@ -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) {