use axum::extract::{Json, Path, State}; use export::rest::{AppResponseData, NoData}; use session::Session; use crate::errors::ApiError; use crate::services::dir::{CreateDirCmd, DirNodeDto}; use crate::services::service::SpaceService; use crate::services::spaces::SpaceNamePath; use session::share::session::require_uid; #[utoipa::path( post, path = "/spaces/{space_name}/dir", tag = "space", description = "在空间目录树中创建目录节点。", params(SpaceNamePath), request_body = CreateDirCmd, responses( (status = 200, description = "dir node created", body = AppResponseData), (status = 400, description = "bad request", body = AppResponseData), (status = 403, description = "forbidden", body = AppResponseData), (status = 404, description = "space or parent not found", body = AppResponseData), (status = 409, description = "resource already exists", body = AppResponseData), (status = 401, description = "authentication required", body = AppResponseData) ) )] pub async fn create_dir_node( State(service): State, session: Session, Path(path): Path, Json(cmd): Json, ) -> Result, ApiError> { let uid = require_uid(&session)?; let node = service.create_dir_node(uid, &path.space_name, cmd).await?; Ok(AppResponseData::ok(node)) }