Error handling

This commit is contained in:
2024-08-05 23:32:16 +03:00
parent 8a4e2dc467
commit 9f76228ebe
21 changed files with 209 additions and 117 deletions

View File

@ -10,17 +10,17 @@ pub async fn delete(
State(pool): State<Pool>,
claims: Claims,
Json(params): Json<Params>,
) -> Result<StatusCode, StatusCode> {
) -> GeneralResult<StatusCode> {
if params.user_id != claims.user_id {
db::folder::get_permissions(params.folder_id, claims.user_id, &pool)
.await
.handle_internal()?
.map_err(GeneralError::permissions)?
.can_manage_guard()?;
}
db::permissions::delete_for_folder(params.folder_id, params.user_id, &pool)
.await
.handle_internal()?;
.handle_internal("Error deleting the permissions")?;
Ok(StatusCode::NO_CONTENT)
}

View File

@ -13,14 +13,14 @@ pub async fn get(
State(pool): State<Pool>,
Query(params): Query<Params>,
claims: Claims,
) -> Result<Json<HashMap<String, PermissionRaw>>, StatusCode> {
) -> GeneralResult<Json<HashMap<String, PermissionRaw>>> {
db::folder::get_permissions(params.folder_id, claims.user_id, &pool)
.await
.handle_internal()?
.map_err(GeneralError::permissions)?
.can_manage_guard()?;
let permissions = db::permissions::get_all_for_folder(params.folder_id, &pool)
.await
.handle_internal()?;
.handle_internal("Error getting permissions")?;
Ok(Json(permissions))
}

View File

@ -3,9 +3,9 @@ use crate::prelude::*;
pub async fn get_top_level(
State(pool): State<Pool>,
claims: Claims,
) -> Result<Json<Vec<Uuid>>, StatusCode> {
) -> GeneralResult<Json<Vec<Uuid>>> {
let folders = db::permissions::get_top_level_permitted_folders(claims.user_id, &pool)
.await
.handle_internal()?;
.handle_internal("Error reading from the database")?;
Ok(Json(folders))
}

View File

@ -1,6 +1,4 @@
use db::permissions::PermissionRaw;
use crate::prelude::*;
use crate::{db::permissions::PermissionRaw, prelude::*};
#[derive(Deserialize, Debug)]
pub struct Params {
@ -13,25 +11,31 @@ pub async fn set(
claims: Claims,
State(pool): State<Pool>,
Json(params): Json<Params>,
) -> Result<StatusCode, StatusCode> {
) -> GeneralResult<StatusCode> {
let root = db::folder::get_root(claims.user_id, &pool)
.await
.handle_internal()?;
.handle_internal("Error getting the root folder")?;
if params.folder_id == root {
return Err(StatusCode::BAD_REQUEST);
return Err(GeneralError::message(
StatusCode::BAD_REQUEST,
"Cannot delete the root folder",
));
}
db::folder::get_permissions(params.folder_id, claims.user_id, &pool)
.await
.handle_internal()?
.map_err(GeneralError::permissions)?
.can_manage_guard()?;
let folder_info = db::folder::get_by_id(params.folder_id, &pool)
.await
.handle_internal()?
.ok_or(StatusCode::NOT_FOUND)?;
.handle_internal("Error getting folder info")?
.ok_or_else(GeneralError::item_not_found)?;
if folder_info.owner_id == params.user_id {
return Err(StatusCode::BAD_REQUEST);
return Err(GeneralError::message(
StatusCode::BAD_REQUEST,
"Cannot set permissions of the folder owner",
));
}
db::permissions::insert(
@ -41,7 +45,7 @@ pub async fn set(
&pool,
)
.await
.handle_internal()?;
.handle_internal("Error writing to the database")?;
Ok(StatusCode::NO_CONTENT)
}