Error handling
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -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))
|
||||
}
|
||||
|
@ -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))
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user