diff --git a/src/db/mod.rs b/src/db/mod.rs index 261221d..4c31158 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -67,5 +67,6 @@ pub struct GetResponse { pub struct Metadata { pub total: i32, pub limit: i32, - pub page: i32 + pub page: i32, + pub pages: i32 } diff --git a/src/db/spells/model.rs b/src/db/spells/model.rs index f41ac6f..106ce8a 100644 --- a/src/db/spells/model.rs +++ b/src/db/spells/model.rs @@ -50,7 +50,10 @@ impl QuerySpell { pub fn get_all(filters: &QueryFilters, limit: i32, page: i32) -> Result, ServiceError> { let mut conn = crate::db::connection()?; let mut query = spells::table.limit(limit as i64).into_boxed(); - query = query.filter(spells::id.gt(std::cmp::max(0, page - 1) * limit)); + // Limit query to page and limit + let offset = (page - 1) * limit; + query = query.offset(offset as i64); + // Apply filters if let Some(name) = filters.by_name.to_owned() { query = query.filter(spells::name.ilike(format!("%{}%", name))); } diff --git a/src/db/spells/routes.rs b/src/db/spells/routes.rs index 1671b4b..04cad71 100644 --- a/src/db/spells/routes.rs +++ b/src/db/spells/routes.rs @@ -41,7 +41,8 @@ async fn get_all(req: HttpRequest) -> HttpResponse { metadata: Some(Metadata { total: total_count as i32, limit, - page + page, + pages: max_page }) }) },