summaryrefslogtreecommitdiffstats
path: root/src/routes/warning.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-10-16 16:32:55 +0000
committerSanto Cariotti <santo@dcariotti.me>2022-10-16 16:32:55 +0000
commiteb40fab2c1df7867bcc25f4b5d5f141b258f2654 (patch)
tree1e0543e2009a871d71a38eb6808f814f5ee2e2fb /src/routes/warning.rs
parent9790a954fc9cc094c98faee1a8ce10f6adeec93d (diff)
Remove warnings
Diffstat (limited to 'src/routes/warning.rs')
-rw-r--r--src/routes/warning.rs21
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>,