34 lines
849 B
Rust
34 lines
849 B
Rust
use crate::prelude::*;
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct Params {
|
|
folder_id: Uuid,
|
|
}
|
|
|
|
pub async fn delete(
|
|
State(state): State<AppState>,
|
|
claims: Claims,
|
|
Json(params): Json<Params>,
|
|
) -> Result<(), StatusCode> {
|
|
let root = db::folder::get_root(claims.user_id, &state.pool)
|
|
.await
|
|
.handle_internal()?;
|
|
if params.folder_id == root {
|
|
return Err(StatusCode::BAD_REQUEST);
|
|
}
|
|
|
|
db::folder::get_permissions(params.folder_id, claims.user_id, &state.pool)
|
|
.await
|
|
.handle_internal()?
|
|
.can_write_guard()?;
|
|
|
|
let storage = &state.storage;
|
|
db::folder::delete(params.folder_id, &state.pool)
|
|
.try_for_each_concurrent(5, |file| async move {
|
|
let _ = storage.delete(file).await;
|
|
Ok(())
|
|
})
|
|
.await
|
|
.handle_internal()
|
|
}
|