feat: transaction query pagination
This commit is contained in:
@@ -19,7 +19,7 @@ use crate::util;
|
||||
use crate::util::req::CommonResp;
|
||||
use chrono::prelude::*;
|
||||
use tracing::info;
|
||||
use crate::model::req::Params;
|
||||
use crate::model::req::GetAmountParams;
|
||||
|
||||
const PAYMENT_STORE_EXPO: i64 = 5;
|
||||
|
||||
@@ -315,6 +315,7 @@ pub async fn get_transaction(
|
||||
pub async fn get_all_transactions(
|
||||
State(app_state): State<crate::AppState>,
|
||||
claims: Claims,
|
||||
Query(queryParams): Query<req::GetTransactionsQueryParams>,
|
||||
) -> Result<Json<Vec<db_model::Transaction>>, (StatusCode, String)> {
|
||||
let uid: i64 = claims.uid.clone();
|
||||
let conn = app_state
|
||||
@@ -322,10 +323,27 @@ pub async fn get_all_transactions(
|
||||
.get()
|
||||
.await
|
||||
.map_err(util::req::internal_error)?;
|
||||
let offset = match queryParams.start {
|
||||
None => {0}
|
||||
Some(start) => if start > 0 {start-1} else {0}
|
||||
};
|
||||
let limit = match queryParams.limit {
|
||||
None => {1 as i32}
|
||||
Some(limit_num) => {
|
||||
if(limit_num > req::MAX_QUERY_LIMIT) {
|
||||
req::MAX_QUERY_LIMIT
|
||||
} else if(limit_num < 1) {
|
||||
1 as i32
|
||||
} else {
|
||||
limit_num
|
||||
}
|
||||
}
|
||||
};
|
||||
let res = conn
|
||||
.interact(move |conn| {
|
||||
schema::transactions::table
|
||||
.filter(schema::transactions::uid.eq(uid))
|
||||
schema::transactions::table.filter(schema::transactions::uid.eq(uid))
|
||||
.offset(offset)
|
||||
.limit(limit as i64)
|
||||
.select(db_model::Transaction::as_select())
|
||||
.load(conn)
|
||||
})
|
||||
@@ -338,7 +356,7 @@ pub async fn get_all_transactions(
|
||||
pub async fn get_amounts_by_tid(
|
||||
State(app_state): State<crate::AppState>,
|
||||
claims: Claims,
|
||||
Query(params): Query<Params>,
|
||||
Query(params): Query<GetAmountParams>,
|
||||
) -> Result<Json<Vec<db_model::Amount>>, (StatusCode, String)> {
|
||||
info!(params.transaction_id);
|
||||
let tid = match params.transaction_id {
|
||||
|
||||
@@ -2,8 +2,14 @@ use std::fmt;
|
||||
use std::str::FromStr;
|
||||
use serde::{de, Deserialize, Deserializer};
|
||||
|
||||
pub const QUERY_ORDER_INCREASE:i32 = 0;
|
||||
pub const QUERY_ORDER_INVERT:i32 = 1;
|
||||
|
||||
pub const MAX_QUERY_LIMIT:i32 =1000;
|
||||
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct Params {
|
||||
pub struct GetAmountParams {
|
||||
#[serde(default, deserialize_with="empty_string_as_none")]
|
||||
pub transaction_id: Option<i64>,
|
||||
}
|
||||
@@ -21,3 +27,9 @@ where
|
||||
Some(s) => FromStr::from_str(s).map_err(de::Error::custom).map(Some),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct GetTransactionsQueryParams {
|
||||
pub start: Option<i64>,
|
||||
pub limit: Option<i32>,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user