use axum::response::Json; use serde_json::Value; use utoipa::OpenApi; use crate::{ApiDoc, AuthApiDoc, ConfigApiDoc, WorkflowApiDoc, MessageApiDoc}; /// GET /docs/openapi.json /// /// 返回 OpenAPI 3.0 规范 JSON 文档,合并所有模块的路径和 schema。 pub async fn openapi_spec() -> Json { let mut spec = ApiDoc::openapi(); spec.merge(AuthApiDoc::openapi()); spec.merge(ConfigApiDoc::openapi()); spec.merge(WorkflowApiDoc::openapi()); spec.merge(MessageApiDoc::openapi()); Json(serde_json::to_value(spec).unwrap_or_default()) }