From 357b9e646df220575df37fe1d6705a9667210997 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Sat, 24 Sep 2022 18:10:08 +0200 Subject: Get user's models --- src/routes/model.rs | 6 +++--- src/routes/user.rs | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) (limited to 'src/routes') diff --git a/src/routes/model.rs b/src/routes/model.rs index b510ade..16468d0 100644 --- a/src/routes/model.rs +++ b/src/routes/model.rs @@ -27,9 +27,9 @@ pub fn create_route() -> Router { } #[derive(Serialize)] -struct ModelPagination { - count: i64, - results: Vec, +pub struct ModelPagination { + pub count: i64, + pub results: Vec, } /// List models. diff --git a/src/routes/user.rs b/src/routes/user.rs index 4904531..172007a 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -6,6 +6,7 @@ use crate::{ user::{User, UserList}, }, pagination::Pagination, + routes::model::ModelPagination, }; use axum::{ extract::{ContentLengthLimit, Multipart, Path, Query}, @@ -21,6 +22,7 @@ pub fn create_route() -> Router { .route("/me", get(get_me)) .route("/me/avatar", put(edit_my_avatar).delete(delete_my_avatar)) .route("/:id", get(get_user)) + .route("/:id/models", get(get_user_models)) } #[derive(Serialize)] @@ -108,3 +110,22 @@ async fn get_user(Path(user_id): Path) -> Result, AppError> Err(_) => Err(AppError::NotFound("User not found".to_string())), } } + +/// Get user models list +async fn get_user_models( + Path(user_id): Path, + pagination: Query, +) -> Result, AppError> { + let user = match User::find_by_id(user_id).await { + Ok(user) => user, + Err(_) => { + return Err(AppError::NotFound("User not found".to_string())); + } + }; + + let page = pagination.0.page.unwrap_or_default(); + let results = user.get_models(page).await?; + let count = user.count_models().await?; + + Ok(Json(ModelPagination { count, results })) +} -- cgit v1.2.3-71-g8e6c