This repository has been archived on 2024-08-23. You can view files and clone it, but cannot push or open issues or pull requests.
2024-08-04 12:34:46 +03:00

48 lines
1.1 KiB
Rust

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<Pool>,
Json(params): Json<Params>,
) -> Result<StatusCode, StatusCode> {
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)
}