use crate::prelude::*; #[derive(Deserialize, Debug)] pub struct Params { folder_id: Uuid, } pub async fn delete( State(state): State, claims: Claims, Json(params): Json, ) -> 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() }