d1-orm-engine 0.1.1

Table, model, batch, raw SQL engine for rust-d1-orm
Documentation
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 })
    }
}