d1_orm_engine/
pagination.rs1use d1_orm_query::Query;
2use crate::{error::OrmError, model::D1Model, table::Table};
3
4pub struct Page<M> {
5 pub items: Vec<M>,
6 pub total: u64,
7 pub page: u32,
8 pub per_page: u32,
9 pub has_next: bool,
10}
11
12impl<'db, M: D1Model> Table<'db, M> {
13 pub async fn paginate(&self, base: Query, page: u32, per_page: u32) -> Result<Page<M>, OrmError> {
14 let total = self.count(base.clone()).await?;
15 let offset = ((page.saturating_sub(1)) as u64) * (per_page as u64);
16 let items = self.find_all(base.limit(per_page as u64).offset(offset)).await?;
17 let has_next = (page as u64) * (per_page as u64) < total;
18 Ok(Page { items, total, page, per_page, has_next })
19 }
20}