openapi格式的文档基础生成 #3
75
generate.go
75
generate.go
@ -324,28 +324,28 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
|
|||||||
inputType.Field(i).Type.Kind() == reflect.Slice {
|
inputType.Field(i).Type.Kind() == reflect.Slice {
|
||||||
if convertType := g.realBaseType2SwaggerType(inputType.Field(i).Type.String()); !strings.HasPrefix(convertType, "[]") && convertType != inputType.Field(i).Type.Kind().String() {
|
if convertType := g.realBaseType2SwaggerType(inputType.Field(i).Type.String()); !strings.HasPrefix(convertType, "[]") && convertType != inputType.Field(i).Type.Kind().String() {
|
||||||
// 针对基础类型指针
|
// 针对基础类型指针
|
||||||
g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{
|
g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{
|
||||||
Type: g.realBaseType2SwaggerType(convertType),
|
Type: g.realBaseType2SwaggerType(convertType),
|
||||||
Format: inputType.Field(i).Type.String(),
|
Format: inputType.Field(i).Type.String(),
|
||||||
Default: g.getDefaultValue(inputType.Field(i)),
|
Default: ParseStructField.GetDefaultValue(inputType.Field(i)),
|
||||||
Description: g.getParamDesc(inputType.Field(i)),
|
Description: ParseStructField.GetParamDesc(inputType.Field(i)),
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if inputType.Field(i).Type.Kind() == reflect.Struct ||
|
if inputType.Field(i).Type.Kind() == reflect.Struct ||
|
||||||
inputType.Field(i).Type.Kind() == reflect.Map {
|
inputType.Field(i).Type.Kind() == reflect.Map {
|
||||||
g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{
|
g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{
|
||||||
Type: consts.SwaggerDataTypeObject,
|
Type: consts.SwaggerDataTypeObject,
|
||||||
Format: inputType.Field(i).Type.String(),
|
Format: inputType.Field(i).Type.String(),
|
||||||
Description: g.getParamDesc(inputType.Field(i)),
|
Description: ParseStructField.GetParamDesc(inputType.Field(i)),
|
||||||
Properties: map[string]*define.Property{},
|
Properties: map[string]*define.Property{},
|
||||||
}
|
}
|
||||||
} else if inputType.Field(i).Type.Kind() == reflect.Array ||
|
} else if inputType.Field(i).Type.Kind() == reflect.Array ||
|
||||||
inputType.Field(i).Type.Kind() == reflect.Slice {
|
inputType.Field(i).Type.Kind() == reflect.Slice {
|
||||||
g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{
|
g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{
|
||||||
Type: consts.SwaggerDataTypeArray,
|
Type: consts.SwaggerDataTypeArray,
|
||||||
Format: inputType.Field(i).Type.String(),
|
Format: inputType.Field(i).Type.String(),
|
||||||
Description: g.getParamDesc(inputType.Field(i)),
|
Description: ParseStructField.GetParamDesc(inputType.Field(i)),
|
||||||
Items: &define.PropertyXOf{
|
Items: &define.PropertyXOf{
|
||||||
Ref: g.parseSliceItem(schemaName, inputType.Field(i).Type),
|
Ref: g.parseSliceItem(schemaName, inputType.Field(i).Type),
|
||||||
},
|
},
|
||||||
@ -354,15 +354,15 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
|
|||||||
} else if inputType.Field(i).Type.Kind() == reflect.Ptr {
|
} else if inputType.Field(i).Type.Kind() == reflect.Ptr {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
g.AddComponentsSchema(schemaName, g.getParamName(inputType.Field(i)), inputType.Field(i).Type)
|
g.AddComponentsSchema(schemaName, ParseStructField.GetParamName(inputType.Field(i)), inputType.Field(i).Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
g.docData.Components.Schemas[schemaName].Properties[g.getParamName(inputType.Field(i))] = &define.Property{
|
g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(inputType.Field(i))] = &define.Property{
|
||||||
Type: g.realBaseType2SwaggerType(inputType.Field(i).Type.String()),
|
Type: g.realBaseType2SwaggerType(inputType.Field(i).Type.String()),
|
||||||
Format: inputType.Field(i).Type.String(),
|
Format: inputType.Field(i).Type.String(),
|
||||||
Default: g.getDefaultValue(inputType.Field(i)),
|
Default: ParseStructField.GetDefaultValue(inputType.Field(i)),
|
||||||
Description: g.getParamDesc(inputType.Field(i)),
|
Description: ParseStructField.GetParamDesc(inputType.Field(i)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -467,56 +467,3 @@ func (g *Generate) realType2SwaggerType(realType string) string {
|
|||||||
}
|
}
|
||||||
return g.realBaseType2SwaggerType(realType)
|
return g.realBaseType2SwaggerType(realType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// getParamName 获取参数名称
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 21:58 2025/2/11
|
|
||||||
func (g *Generate) getParamName(structField reflect.StructField) string {
|
|
||||||
paramNameTagList := []string{
|
|
||||||
define.TagJson, define.TagForm,
|
|
||||||
define.TagXml, define.TagYaml,
|
|
||||||
define.TagYml,
|
|
||||||
}
|
|
||||||
for _, tag := range paramNameTagList {
|
|
||||||
tagVal := structField.Tag.Get(tag)
|
|
||||||
if tagVal != "" {
|
|
||||||
return tagVal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 未设置相关字段, 则字段名即为参数名
|
|
||||||
return structField.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// getParamDesc ...
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 22:01 2025/2/11
|
|
||||||
func (g *Generate) getParamDesc(structField reflect.StructField) string {
|
|
||||||
descTagList := []string{define.TagDesc, define.TagDescription}
|
|
||||||
for _, tag := range descTagList {
|
|
||||||
tagVal := structField.Tag.Get(tag)
|
|
||||||
if tagVal != "" {
|
|
||||||
return tagVal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 没有显示的设置参数描述, 则使用参数名作为参数描述
|
|
||||||
return g.getParamName(structField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// getDefaultValue 获取默认值
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 22:05 2025/2/11
|
|
||||||
func (g *Generate) getDefaultValue(structField reflect.StructField) string {
|
|
||||||
defaultTagList := []string{define.TagD, define.TagDefault}
|
|
||||||
for _, tag := range defaultTagList {
|
|
||||||
if tagVal, exist := structField.Tag.Lookup(tag); exist {
|
|
||||||
return tagVal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
73
struct_field.go
Normal file
73
struct_field.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// Package api_doc ...
|
||||||
|
//
|
||||||
|
// Description : api_doc ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2025-02-12 22:15
|
||||||
|
package api_doc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.zhangdeman.cn/gateway/api-doc/define"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ParseStructField = parseStructField{}
|
||||||
|
)
|
||||||
|
|
||||||
|
type parseStructField struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParamName 获取参数名称
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 21:58 2025/2/11
|
||||||
|
func (psf parseStructField) GetParamName(structField reflect.StructField) string {
|
||||||
|
paramNameTagList := []string{
|
||||||
|
define.TagJson, define.TagForm,
|
||||||
|
define.TagXml, define.TagYaml,
|
||||||
|
define.TagYml,
|
||||||
|
}
|
||||||
|
for _, tag := range paramNameTagList {
|
||||||
|
tagVal := structField.Tag.Get(tag)
|
||||||
|
if tagVal != "" {
|
||||||
|
return tagVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 未设置相关字段, 则字段名即为参数名
|
||||||
|
return structField.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParamDesc ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 22:01 2025/2/11
|
||||||
|
func (psf parseStructField) GetParamDesc(structField reflect.StructField) string {
|
||||||
|
descTagList := []string{define.TagDesc, define.TagDescription}
|
||||||
|
for _, tag := range descTagList {
|
||||||
|
tagVal := structField.Tag.Get(tag)
|
||||||
|
if tagVal != "" {
|
||||||
|
return tagVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 没有显示的设置参数描述, 则使用参数名作为参数描述
|
||||||
|
return psf.GetParamName(structField)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDefaultValue 获取默认值
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 22:05 2025/2/11
|
||||||
|
func (psf parseStructField) GetDefaultValue(structField reflect.StructField) string {
|
||||||
|
defaultTagList := []string{define.TagD, define.TagDefault}
|
||||||
|
for _, tag := range defaultTagList {
|
||||||
|
if tagVal, exist := structField.Tag.Lookup(tag); exist {
|
||||||
|
return tagVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user