diff --git a/openapi/generate.go b/openapi/generate.go index a456350..5934717 100644 --- a/openapi/generate.go +++ b/openapi/generate.go @@ -124,7 +124,13 @@ func NewOpenApiDoc(optionFunc ...OptionFunc) *openapi3.T { // Generate 生成 OpenApi 标准规范的文档 type Generate struct { - docTable map[string]*openapi3.T + docTable map[string]*openapi3.T + enableRedundantStorageComponents bool // 冗余存储 +} + +// EnableRedundantStorageComponents 开启冗余存储 +func (g *Generate) EnableRedundantStorageComponents() { + g.enableRedundantStorageComponents = true } // DocData 获取一个文档数据 @@ -167,7 +173,6 @@ func (g *Generate) AddApiDoc(docFlag string, apiMeta define.UriConfig, request a schemaData := GenerateOpenAPISchema(requestType) apiOperate, isRead := g.initApiConfig(docFlag, apiMeta) - //requestTypeStr := requestType.String() if isRead { if nil != schemaData { for paramName, paramConfig := range schemaData.Value.Properties { @@ -219,13 +224,19 @@ func (g *Generate) AddApiDoc(docFlag string, apiMeta define.UriConfig, request a } } - /*if _, exist := g.docTable[docFlag].Components.Schemas[requestTypeStr]; !exist { - g.docTable[docFlag].Components.Schemas[requestTypeStr] = schemaData - }*/ - /*responseTypeStr := responseType.String() - if _, exist := g.docTable[docFlag].Components.Schemas[responseTypeStr]; !exist { - g.docTable[docFlag].Components.Schemas[responseTypeStr] = GenerateOpenAPISchema(responseType) - }*/ + if g.enableRedundantStorageComponents { + // 此处是冗余 components 设置, 便于查看结构体, 不冗余文档也可正常解析 + requestTypeStr := requestType.String() + if _, exist := g.docTable[docFlag].Components.Schemas[requestTypeStr]; !exist { + g.docTable[docFlag].Components.Schemas[requestTypeStr] = schemaData + } + responseTypeStr := responseType.String() + if _, exist := g.docTable[docFlag].Components.Schemas[responseTypeStr]; !exist { + g.docTable[docFlag].Components.Schemas[responseTypeStr] = GenerateOpenAPISchema(responseType) + } + // 冗余处理结束 + } + desc := "请求成功" apiOperate.Responses.Set(fmt.Sprintf("%v", http.StatusOK), &openapi3.ResponseRef{ Extensions: nil, diff --git a/openapi/generate_test.go b/openapi/generate_test.go index 7f053fa..42b746c 100644 --- a/openapi/generate_test.go +++ b/openapi/generate_test.go @@ -37,6 +37,7 @@ func TestGenerate_AddApiDoc(t *testing.T) { UpdatedAt *time.Time `json:"updated_at,omitempty" description:"更新时间"` Category *Category `json:"category,omitempty" description:"分类"` } + DocManager.EnableRedundantStorageComponents() // 启用 components 冗余存储 docFlag := "demo" DocManager.NewOpenApiDoc(docFlag, WithSecurity(&openapi3.SecuritySchemes{ "Token-Auth": {