@@ -2,17 +2,30 @@ import { H160 } from "codechain-primitives";
22import * as Sequelize from "sequelize" ;
33import models from ".." ;
44import * as Exception from "../../exception" ;
5+ import { aggsUTXOPagination } from "../../routers/pagination" ;
56
67export async function getByAddress ( params : {
78 address : string ;
89 assetType ?: H160 | null ;
910 page ?: number | null ;
1011 itemsPerPage ?: number | null ;
12+ firstEvaluatedKey ?: [ number ] | null ;
13+ lastEvaluatedKey ?: [ number ] | null ;
1114} ) {
12- const { address, assetType, page = 1 , itemsPerPage = 15 } = params ;
15+ const {
16+ address,
17+ assetType,
18+ page = 1 ,
19+ itemsPerPage = 15 ,
20+ firstEvaluatedKey,
21+ lastEvaluatedKey
22+ } = params ;
1323 const query : any = getAggsUTXOQuery ( {
1424 address,
15- assetType
25+ assetType,
26+ order : "assetType" ,
27+ firstEvaluatedKey,
28+ lastEvaluatedKey
1629 } ) ;
1730
1831 const includeArray : any = [
@@ -27,9 +40,15 @@ export async function getByAddress(params: {
2740 where : {
2841 [ Sequelize . Op . and ] : query
2942 } ,
30- order : [ [ "address" , "DESC" ] , [ "assetType" , "DESC" ] ] ,
43+ order : aggsUTXOPagination . byAssetType . orderby ( {
44+ firstEvaluatedKey,
45+ lastEvaluatedKey
46+ } ) ,
3147 limit : itemsPerPage ! ,
32- offset : ( page ! - 1 ) * itemsPerPage ! ,
48+ offset :
49+ firstEvaluatedKey || lastEvaluatedKey
50+ ? 0
51+ : ( page ! - 1 ) * itemsPerPage ! ,
3352 include : includeArray
3453 } ) ;
3554 } catch ( err ) {
@@ -43,11 +62,23 @@ export async function getByAssetType(params: {
4362 address ?: string | null ;
4463 page ?: number | null ;
4564 itemsPerPage ?: number | null ;
65+ firstEvaluatedKey ?: [ number ] | null ;
66+ lastEvaluatedKey ?: [ number ] | null ;
4667} ) {
47- const { address, assetType, page = 1 , itemsPerPage = 15 } = params ;
68+ const {
69+ address,
70+ assetType,
71+ page = 1 ,
72+ itemsPerPage = 15 ,
73+ firstEvaluatedKey,
74+ lastEvaluatedKey
75+ } = params ;
4876 const query : any = getAggsUTXOQuery ( {
4977 address,
50- assetType
78+ assetType,
79+ order : "address" ,
80+ firstEvaluatedKey,
81+ lastEvaluatedKey
5182 } ) ;
5283
5384 const includeArray : any = [
@@ -62,9 +93,15 @@ export async function getByAssetType(params: {
6293 where : {
6394 [ Sequelize . Op . and ] : query
6495 } ,
65- order : [ [ "assetType" , "DESC" ] , [ "address" , "DESC" ] ] ,
96+ order : aggsUTXOPagination . byAddress . orderby ( {
97+ firstEvaluatedKey,
98+ lastEvaluatedKey
99+ } ) ,
66100 limit : itemsPerPage ! ,
67- offset : ( page ! - 1 ) * itemsPerPage ! ,
101+ offset :
102+ firstEvaluatedKey || lastEvaluatedKey
103+ ? 0
104+ : ( page ! - 1 ) * itemsPerPage ! ,
68105 include : includeArray
69106 } ) ;
70107 } catch ( err ) {
@@ -76,8 +113,17 @@ export async function getByAssetType(params: {
76113function getAggsUTXOQuery ( params : {
77114 address ?: string | null ;
78115 assetType ?: H160 | null ;
116+ order : "assetType" | "address" ;
117+ firstEvaluatedKey ?: [ number ] | null ;
118+ lastEvaluatedKey ?: [ number ] | null ;
79119} ) {
80- const { address, assetType } = params ;
120+ const {
121+ order,
122+ address,
123+ assetType,
124+ firstEvaluatedKey,
125+ lastEvaluatedKey
126+ } = params ;
81127 const query = [ ] ;
82128 if ( address ) {
83129 query . push ( {
@@ -90,5 +136,23 @@ function getAggsUTXOQuery(params: {
90136 } ) ;
91137 }
92138
139+ if ( firstEvaluatedKey || lastEvaluatedKey ) {
140+ if ( order === "assetType" ) {
141+ query . push (
142+ aggsUTXOPagination . byAssetType . where ( {
143+ firstEvaluatedKey,
144+ lastEvaluatedKey
145+ } )
146+ ) ;
147+ } else if ( order === "address" ) {
148+ query . push (
149+ aggsUTXOPagination . byAddress . where ( {
150+ firstEvaluatedKey,
151+ lastEvaluatedKey
152+ } )
153+ ) ;
154+ }
155+ }
156+
93157 return query ;
94158}
0 commit comments