From 5a43e5e38bea77d63074a8db9a319e3ff77fd75a Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Sat, 10 Sep 2022 11:11:35 +0200 Subject: Add pagination --- src/routes/model.rs | 18 ++++++++++++++---- src/routes/user.rs | 25 +++++++++++++++++++++---- 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'src/routes') diff --git a/src/routes/model.rs b/src/routes/model.rs index a5cd2b3..4ac2688 100644 --- a/src/routes/model.rs +++ b/src/routes/model.rs @@ -3,18 +3,28 @@ use crate::models::{ auth::Claims, model::{Model, ModelCreate, ModelUser}, }; -use axum::{routing::get, Json, Router}; +use crate::pagination::Pagination; +use axum::{extract::Query, routing::get, Json, Router}; +use serde::Serialize; /// Create routes for `/v1/models/` namespace pub fn create_route() -> Router { Router::new().route("/", get(list_models).post(create_model)) } +#[derive(Serialize)] +struct ModelPagination { + count: i64, + results: Vec, +} + /// List models. -async fn list_models() -> Result>, AppError> { - let models = Model::list().await?; +async fn list_models(pagination: Query) -> Result, AppError> { + let page = pagination.0.page.unwrap_or_default(); + let results = Model::list(page).await?; + let count = Model::count().await?; - Ok(Json(models)) + Ok(Json(ModelPagination { count, results })) } /// Create a model. Checks Authorization token diff --git a/src/routes/user.rs b/src/routes/user.rs index 3dfb73a..4ac994c 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -3,7 +3,13 @@ use crate::models::{ auth::Claims, user::{User, UserCreate, UserList}, }; -use axum::{extract::Path, routing::get, Json, Router}; +use crate::pagination::Pagination; +use axum::{ + extract::{Path, Query}, + routing::get, + Json, Router, +}; +use serde::Serialize; /// Create routes for `/v1/users/` namespace pub fn create_route() -> Router { @@ -12,11 +18,22 @@ pub fn create_route() -> Router { .route("/:id", get(get_user)) } +#[derive(Serialize)] +struct UserPagination { + count: i64, + results: Vec, +} + /// List users. Checks Authorization token -async fn list_users(_: Claims) -> Result>, AppError> { - let users = User::list().await?; +async fn list_users( + _: Claims, + pagination: Query, +) -> Result, AppError> { + let page = pagination.0.page.unwrap_or_default(); + let results = User::list(page).await?; + let count = User::count().await?; - Ok(Json(users)) + Ok(Json(UserPagination { count, results })) } /// Create an user. Checks Authorization token -- cgit v1.2.3-71-g8e6c