@@ -13,9 +13,11 @@ const getOrderByKey = sortBy => {
1313} ;
1414
1515const getRelayersForTokenInPeriod = async ( tokenAddress , period , options ) => {
16- const { limit, sortBy } = options ;
16+ const { limit, page , sortBy } = options ;
1717 const { dateFrom, dateTo } = getDatesForPeriod ( period ) ;
1818
19+ const startIndex = ( page - 1 ) * limit ;
20+
1921 const response = await elasticsearch . getClient ( ) . search ( {
2022 index : 'traded_tokens' ,
2123 body : {
@@ -42,7 +44,7 @@ const getRelayersForTokenInPeriod = async (tokenAddress, period, options) => {
4244 stats_by_relayer : {
4345 terms : {
4446 field : 'relayerId' ,
45- size : limit ,
47+ size : limit * page ,
4648 missing : - 1 ,
4749 order : {
4850 [ getOrderByKey ( sortBy ) ] : 'desc' ,
@@ -74,6 +76,17 @@ const getRelayersForTokenInPeriod = async (tokenAddress, period, options) => {
7476 field : 'tradedAmountUSD' ,
7577 } ,
7678 } ,
79+ bucket_truncate : {
80+ bucket_sort : {
81+ size : limit ,
82+ from : startIndex ,
83+ } ,
84+ } ,
85+ } ,
86+ } ,
87+ relayerCount : {
88+ cardinality : {
89+ field : 'relayerId' ,
7790 } ,
7891 } ,
7992 } ,
@@ -86,32 +99,39 @@ const getRelayersForTokenInPeriod = async (tokenAddress, period, options) => {
8699
87100 const relayers = await Relayer . find ( { lookupId : { $in : relayerIds } } ) . lean ( ) ;
88101
89- return response . body . aggregations . stats_by_relayer . buckets . map ( bucket => {
90- const relayer =
91- bucket . key === - 1
92- ? { id : 'unknown' , name : 'Unknown' , slug : 'unknown' }
93- : relayers . find ( r => r . lookupId === bucket . key ) ;
102+ const relayerCount = response . body . aggregations . relayerCount . value ;
94103
95- return {
96- id : _ . get ( relayer , 'id' , null ) ,
97- imageUrl : _ . get ( relayer , 'imageUrl' , null ) ,
98- name : _ . get ( relayer , 'name' , null ) ,
99- slug : _ . get ( relayer , 'slug' , null ) ,
100- stats : {
101- fillCount : bucket . doc_count ,
102- fillVolume : {
103- token : bucket . fillVolume . value ,
104- USD : bucket . fillVolumeUSD . value ,
105- } ,
106- tradeCount : bucket . tradeCount . value ,
107- tradeVolume : {
108- token : bucket . tradeVolume . value ,
109- USD : bucket . tradeVolumeUSD . value ,
110- } ,
104+ return {
105+ relayers : response . body . aggregations . stats_by_relayer . buckets . map (
106+ bucket => {
107+ const relayer =
108+ bucket . key === - 1
109+ ? { id : 'unknown' , name : 'Unknown' , slug : 'unknown' }
110+ : relayers . find ( r => r . lookupId === bucket . key ) ;
111+
112+ return {
113+ id : _ . get ( relayer , 'id' , null ) ,
114+ imageUrl : _ . get ( relayer , 'imageUrl' , null ) ,
115+ name : _ . get ( relayer , 'name' , null ) ,
116+ slug : _ . get ( relayer , 'slug' , null ) ,
117+ stats : {
118+ fillCount : bucket . doc_count ,
119+ fillVolume : {
120+ token : bucket . fillVolume . value ,
121+ USD : bucket . fillVolumeUSD . value ,
122+ } ,
123+ tradeCount : bucket . tradeCount . value ,
124+ tradeVolume : {
125+ token : bucket . tradeVolume . value ,
126+ USD : bucket . tradeVolumeUSD . value ,
127+ } ,
128+ } ,
129+ url : _ . get ( relayer , 'url' , null ) ,
130+ } ;
111131 } ,
112- url : _ . get ( relayer , 'url' , null ) ,
113- } ;
114- } ) ;
132+ ) ,
133+ resultCount : relayerCount ,
134+ } ;
115135} ;
116136
117137module . exports = getRelayersForTokenInPeriod ;
0 commit comments