diff --git a/explorer/src/service/api.rs b/explorer/src/service/api.rs index 957ae1d..785ba19 100644 --- a/explorer/src/service/api.rs +++ b/explorer/src/service/api.rs @@ -793,7 +793,7 @@ impl Api { )] async fn v2_get_delegations( &self, - address: Query, + address: Query>, page: Query>, page_size: Query>, ) -> poem::Result { diff --git a/explorer/src/service/v2/delegation.rs b/explorer/src/service/v2/delegation.rs index 3b96540..bdbf076 100644 --- a/explorer/src/service/v2/delegation.rs +++ b/explorer/src/service/v2/delegation.rs @@ -102,25 +102,41 @@ pub struct V2DelegationTxsData { pub async fn v2_get_delegations( api: &Api, - address: Query, + address: Query>, page: Query>, page_size: Query>, ) -> Result { let page = page.0.unwrap_or(1); let page_size = page_size.0.unwrap_or(10); let mut conn = api.storage.lock().await.acquire().await?; - let sql_count = format!( - "SELECT count(*) AS cnt FROM delegations WHERE sender='{}'", - address.0.to_lowercase() - ); + + let (sql_count, sql_query) = if let Some(addr) = address.0 { + ( + format!( + "SELECT count(*) AS cnt FROM delegations WHERE sender='{}'", + addr.to_lowercase() + ), + format!( + "SELECT tx,block,sender,amount,validator,new_validator,timestamp,height,content FROM delegations WHERE sender='{}' ORDER BY timestamp DESC LIMIT {} OFFSET {}", + addr.to_lowercase(), + page_size, + (page - 1) * page_size + ), + ) + } else { + ( + "SELECT count(*) AS cnt FROM delegations".to_string(), + format!( + "SELECT tx,block,sender,amount,validator,new_validator,timestamp,height,content FROM delegations ORDER BY timestamp DESC LIMIT {} OFFSET {}", + page_size, + (page - 1) * page_size + ), + ) + }; + let row_cnt = sqlx::query(sql_count.as_str()).fetch_one(&mut conn).await?; let total: i64 = row_cnt.try_get("cnt")?; - let sql_query = format!( - "SELECT tx,block,sender,amount,validator,new_validator,timestamp,height,content FROM delegations WHERE sender='{}' ORDER BY timestamp DESC LIMIT {} OFFSET {}", - address.0.to_lowercase(), page_size, (page-1)*page_size - ); - let mut res: Vec = vec![]; let rows = sqlx::query(sql_query.as_str()).fetch_all(&mut conn).await?; for row in rows {