use db::permissions::PermissionRaw; use crate::prelude::*; #[derive(Deserialize, Debug)] pub struct Params { folder_id: Uuid, permission_type: PermissionRaw, user_id: i32, } pub async fn set( claims: Claims, State(pool): State, Json(params): Json, ) -> Result { let root = db::folder::get_root(claims.user_id, &pool) .await .handle_internal()?; if params.folder_id == root { return Err(StatusCode::BAD_REQUEST); } db::folder::get_permissions(params.folder_id, claims.user_id, &pool) .await .handle_internal()? .can_manage_guard()?; let folder_info = db::folder::get_by_id(params.folder_id, &pool) .await .handle_internal()? .ok_or(StatusCode::NOT_FOUND)?; if folder_info.owner_id == params.user_id { return Err(StatusCode::BAD_REQUEST); } db::permissions::insert( params.user_id, params.folder_id, params.permission_type, &pool, ) .await .handle_internal()?; Ok(StatusCode::NO_CONTENT) }