diff options
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/model.rs | 6 | ||||
| -rw-r--r-- | src/routes/user.rs | 21 |
2 files changed, 24 insertions, 3 deletions
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<ModelUser>, +pub struct ModelPagination { + pub count: i64, + pub results: Vec<ModelUser>, } /// 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<i32>) -> Result<Json<UserList>, AppError> Err(_) => Err(AppError::NotFound("User not found".to_string())), } } + +/// Get user models list +async fn get_user_models( + Path(user_id): Path<i32>, + pagination: Query<Pagination>, +) -> Result<Json<ModelPagination>, 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 })) +} |
