use d1_orm_query::Query;
use crate::{error::OrmError, model::D1Model, table::Table};
pub struct Page<M> {
pub items: Vec<M>,
pub total: u64,
pub page: u32,
pub per_page: u32,
pub has_next: bool,
}
impl<'db, M: D1Model> Table<'db, M> {
pub async fn paginate(&self, base: Query, page: u32, per_page: u32) -> Result<Page<M>, OrmError> {
let total = self.count(base.clone()).await?;
let offset = ((page.saturating_sub(1)) as u64) * (per_page as u64);
let items = self.find_all(base.limit(per_page as u64).offset(offset)).await?;
let has_next = (page as u64) * (per_page as u64) < total;
Ok(Page { items, total, page, per_page, has_next })
}
}