···318318 }
319319320320 // 3. Get top flushers (leaderboard) - excluding test accounts
321321- const { data: leaderboardData, error: leaderboardError } = await supabase
322322- .from('flushing_records')
323323- .select('did, handle')
324324- .order('created_at', { ascending: false });
321321+ // Note: We need ALL records to get accurate counts, not just recent ones
322322+ console.log('Fetching ALL flushing records for accurate leaderboard counts...');
325323326326- if (leaderboardError) {
327327- throw new Error(`Failed to get leaderboard data: ${leaderboardError.message}`);
324324+ let allLeaderboardData: any[] = [];
325325+ let from = 0;
326326+ const pageSize = 1000; // Supabase's default limit
327327+ let hasMore = true;
328328+329329+ while (hasMore) {
330330+ console.log(`Fetching leaderboard page: ${from} to ${from + pageSize - 1}`);
331331+332332+ const { data: pageData, error: pageError } = await supabase
333333+ .from('flushing_records')
334334+ .select('did, handle')
335335+ .range(from, from + pageSize - 1);
336336+337337+ if (pageError) {
338338+ throw new Error(`Failed to get leaderboard data: ${pageError.message}`);
339339+ }
340340+341341+ if (!pageData || pageData.length === 0) {
342342+ hasMore = false;
343343+ } else {
344344+ allLeaderboardData = [...allLeaderboardData, ...pageData];
345345+ hasMore = pageData.length === pageSize; // If we got a full page, there might be more
346346+ from += pageSize;
347347+ }
328348 }
349349+350350+ console.log(`Total leaderboard records fetched: ${allLeaderboardData.length}`);
351351+ const leaderboardData = allLeaderboardData;
329352330353 // Count flushes by DID from Supabase (for ranking only)
331354 const didCounts = new Map<string, number>();