summaryrefslogtreecommitdiffstats
path: root/src/routes
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-09-10 09:11:35 +0000
committerSanto Cariotti <santo@dcariotti.me>2022-09-10 09:11:35 +0000
commit5a43e5e38bea77d63074a8db9a319e3ff77fd75a (patch)
tree2906b8c3292f126ddef9e7801f054b7294f97820 /src/routes
parente8c799cb65f58c1e9a4b2809489ef3b5760638d8 (diff)
Add pagination
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/model.rs18
-rw-r--r--src/routes/user.rs25
2 files changed, 35 insertions, 8 deletions
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<ModelUser>,
+}
+
/// List models.
-async fn list_models() -> Result<Json<Vec<ModelUser>>, AppError> {
- let models = Model::list().await?;
+async fn list_models(pagination: Query<Pagination>) -> Result<Json<ModelPagination>, 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<UserList>,
+}
+
/// List users. Checks Authorization token
-async fn list_users(_: Claims) -> Result<Json<Vec<UserList>>, AppError> {
- let users = User::list().await?;
+async fn list_users(
+ _: Claims,
+ pagination: Query<Pagination>,
+) -> Result<Json<UserPagination>, 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