summaryrefslogtreecommitdiffstats
path: root/src/routes/warning.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/warning.rs')
-rw-r--r--src/routes/warning.rs177
1 files changed, 0 insertions, 177 deletions
diff --git a/src/routes/warning.rs b/src/routes/warning.rs
deleted file mode 100644
index 384218a..0000000
--- a/src/routes/warning.rs
+++ /dev/null
@@ -1,177 +0,0 @@
-use crate::{
- errors::AppError,
- models::{
- auth::Claims,
- model::Model,
- user::User,
- warning::{Warning, WarningCreate, WarningEdit, WarningFilter, WarningFilterPayload},
- },
- pagination::{Pagination, WarningPagination},
- routes::JsonCreate,
-};
-use axum::{
- extract::{Path, Query},
- http::StatusCode,
- routing::{get, post},
- Json, Router,
-};
-
-/// Create routes for `/v1/warnings/` namespace
-pub fn create_route() -> Router {
- Router::new()
- .route("/", get(list_warnings).post(create_warning))
- .route(
- "/:id",
- get(get_warning).put(edit_warning).delete(delete_warning),
- )
- .route("/filter", post(filter_warnings))
-}
-
-/// List warnings. A staffer can see everything.
-async fn list_warnings(
- pagination: Query<Pagination>,
- claims: Claims,
-) -> Result<Json<WarningPagination>, AppError> {
- let page = pagination.0.page.unwrap_or_default();
-
- let user = User::find_by_id(claims.user_id).await?;
-
- let (results, count) = match user.is_staff.unwrap() {
- true => (
- Warning::list(page, None).await?,
- Warning::count(None).await?,
- ),
- false => (
- Warning::list(page, Some(user.id)).await?,
- Warning::count(Some(user.id)).await?,
- ),
- };
-
- Ok(Json(WarningPagination { count, results }))
-}
-
-/// Get a warning with id = `model_id`
-async fn get_warning(
- Path(warning_id): Path<i32>,
- claims: Claims,
-) -> Result<Json<Warning>, AppError> {
- let user = User::find_by_id(claims.user_id).await?;
-
- if !(user.is_staff.unwrap()) {
- return Err(AppError::Unauthorized);
- }
-
- match Warning::find_by_id(warning_id).await {
- Ok(warning) => Ok(Json(warning.into())),
- Err(_) => Err(AppError::NotFound("Warning not found".to_string())),
- }
-}
-
-/// Create a warning. Checks Authorization token
-async fn create_warning(
- Json(payload): Json<WarningCreate>,
- claims: Claims,
-) -> Result<JsonCreate<Warning>, AppError> {
- let model = match Model::find_by_id(payload.model_id).await {
- Ok(model) => model,
- Err(_) => return Err(AppError::NotFound("Report not found".to_string())),
- };
-
- let warning = Warning::new(claims.user_id, model.id, payload.note);
-
- let warning_new = Warning::create(warning).await?;
-
- Ok(JsonCreate(warning_new))
-}
-
-/// Staffers can edit a warning
-async fn edit_warning(
- Json(payload): Json<WarningEdit>,
- claims: Claims,
- Path(warning_id): Path<i32>,
-) -> Result<Json<Warning>, AppError> {
- let mut warning: Warning = match Warning::find_by_id(warning_id).await {
- Ok(warning) => warning.into(),
- Err(_) => {
- return Err(AppError::NotFound("Report not found".to_string()));
- }
- };
-
- let user = User::find_by_id(claims.user_id).await?;
-
- if !(user.is_staff.unwrap()) {
- return Err(AppError::Unauthorized);
- }
-
- warning.edit(user.id, payload).await?;
-
- 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>,
- pagination: Query<Pagination>,
- claims: Claims,
-) -> Result<Json<WarningPagination>, AppError> {
- let page = pagination.0.page.unwrap_or_default();
-
- let user = User::find_by_id(claims.user_id).await?;
-
- let (results, count) = match user.is_staff.unwrap() {
- true => (
- Warning::filter(
- page,
- WarningFilter {
- model_id: payload.model_id,
- resolved_by: payload.resolved_by,
- user_id: None,
- },
- )
- .await?,
- Warning::count_by_model_id(WarningFilter {
- model_id: payload.model_id,
- resolved_by: payload.resolved_by,
- user_id: None,
- })
- .await?,
- ),
- false => (
- Warning::filter(
- page,
- WarningFilter {
- model_id: payload.model_id,
- resolved_by: payload.resolved_by,
- user_id: Some(user.id),
- },
- )
- .await?,
- Warning::count_by_model_id(WarningFilter {
- model_id: payload.model_id,
- resolved_by: payload.resolved_by,
- user_id: Some(user.id),
- })
- .await?,
- ),
- };
-
- Ok(Json(WarningPagination { count, results }))
-}