1use sea_orm::{ConnectionTrait, DbErr, Paginator, SelectorTrait};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Serialize, Deserialize, Debug)]
6pub struct PageData<T> {
7 pub list: Vec<T>,
8 pub page_num: u64,
9 pub total: u64,
10 pub total_page: u64,
11 pub page_size: u64,
12}
13
14pub async fn to_page_data<'db, C, S, T>(
16 mut paginator: Paginator<'db, C, S>,
17 current: u64,
18 page_size: u64,
19) -> Result<PageData<T>, DbErr>
20where
21 C: ConnectionTrait,
22 S: SelectorTrait<Item = T> + 'db,
23{
24 let range = 1..current;
25 range.for_each(|_| {
26 paginator.next();
27 });
28 let total_page = paginator.num_pages().await?;
29 let total = paginator.num_items().await?;
30 let list = paginator.fetch().await?;
31 let page_num = paginator.cur_page() + 1;
32 let data = PageData {
33 list,
34 page_num,
35 total,
36 total_page,
37 page_size,
38 };
39 Ok(data)
40}
41
42#[derive(Clone, Debug, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct PageQuery<T> {
46 pub current: u64,
47 pub page_size: u64,
48 pub data: T,
49}