diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2022-10-03 18:24:38 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2022-10-03 18:24:38 +0000 |
| commit | c1f61c458e0e97586796a3acdbd21aedf8b2e8ad (patch) | |
| tree | 35d2aea0e2ce7eda52f5f519ae0dec6ab8b5c1b2 /src/routes | |
| parent | 1d559a116a51140a4f13450fbed896b1929de5c0 (diff) | |
Likes model and them to a model
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/model.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/routes/model.rs b/src/routes/model.rs index 9242c31..d72d7af 100644 --- a/src/routes/model.rs +++ b/src/routes/model.rs @@ -3,6 +3,7 @@ use crate::{ files::{delete_upload, upload}, models::{ auth::Claims, + likes::Like, model::{Model, ModelCreate, ModelUpload, ModelUser}, user::User, }, @@ -21,6 +22,7 @@ pub fn create_route() -> Router { Router::new() .route("/", get(list_models).post(create_model)) .route("/:id", get(get_model).delete(delete_model).put(edit_model)) + .route("/:id/like", post(add_like).delete(delete_like)) .route("/:id/upload", post(upload_model_file)) .route("/:id/upload/:uid", delete(delete_model_file)) } @@ -207,3 +209,45 @@ async fn delete_model_file( Err(e) => Err(e), } } + +/// Assign a like to a model from the Authorization user +async fn add_like(claims: Claims, Path(model_id): Path<i32>) -> Result<StatusCode, AppError> { + let model = match Model::find_by_id(model_id).await { + Ok(model) => model, + Err(_) => { + return Err(AppError::NotFound("Model not found".to_string())); + } + }; + + let user = User::find_by_id(claims.user_id).await?; + + let like = Like::new(user.id, model.id); + + match like.save().await { + Ok(_) => Ok(StatusCode::CREATED), + Err(e) => { + return Err(e); + } + } +} + +/// Remove a like from a model and an Authorization user +async fn delete_like(claims: Claims, Path(model_id): Path<i32>) -> Result<StatusCode, AppError> { + let model = match Model::find_by_id(model_id).await { + Ok(model) => model, + Err(_) => { + return Err(AppError::NotFound("Model not found".to_string())); + } + }; + + let user = User::find_by_id(claims.user_id).await?; + + let like = Like::new(user.id, model.id); + + match like.remove().await { + Ok(_) => Ok(StatusCode::NO_CONTENT), + Err(e) => { + return Err(e); + } + } +} |
