diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2022-10-16 16:32:55 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2022-10-16 16:32:55 +0000 |
| commit | eb40fab2c1df7867bcc25f4b5d5f141b258f2654 (patch) | |
| tree | 1e0543e2009a871d71a38eb6808f814f5ee2e2fb /src/routes | |
| parent | 9790a954fc9cc094c98faee1a8ce10f6adeec93d (diff) | |
Remove warnings
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/warning.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/routes/warning.rs b/src/routes/warning.rs index 42b750b..f33b339 100644 --- a/src/routes/warning.rs +++ b/src/routes/warning.rs @@ -11,6 +11,7 @@ use crate::{ }; use axum::{ extract::{Path, Query}, + http::StatusCode, routing::{get, post, put}, Json, Router, }; @@ -19,7 +20,7 @@ use axum::{ pub fn create_route() -> Router { Router::new() .route("/", get(list_warnings).post(create_warning)) - .route("/:id", put(edit_warning)) + .route("/:id", put(edit_warning).delete(delete_warning)) .route("/filter", post(filter_warnings)) } @@ -87,6 +88,24 @@ async fn edit_warning( Ok(Json(warning)) } +/// A staffer can delete a warning +async fn delete_warning( + claims: Claims, + Path(warning_id): Path<i32>, +) -> Result<StatusCode, AppError> { + let user = User::find_by_id(claims.user_id).await?; + + if !user.is_staff.unwrap() { + return Err(AppError::Unauthorized); + } + + if Warning::delete(warning_id).await.is_ok() { + Ok(StatusCode::NO_CONTENT) + } else { + Ok(StatusCode::BAD_REQUEST) + } +} + /// Apply a filter to warnings list async fn filter_warnings( Json(payload): Json<WarningFilterPayload>, |
