diff --git a/common.go b/common.go index 6f3f664..4bb4848 100644 --- a/common.go +++ b/common.go @@ -9,9 +9,11 @@ package api_doc import ( "fmt" - "git.zhangdeman.cn/gateway/api-doc/define" - "git.zhangdeman.cn/zhangdeman/consts" "strings" + + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/gateway/api-doc/enums" + "git.zhangdeman.cn/zhangdeman/consts" ) // GetUriPathParamList 获取uri参数列表 @@ -60,22 +62,22 @@ func GetDataType(docParamType string, formatType string) string { // format type 和内置的支持数据类型不一致, 根据文档类型进行转换 switch docParamType { - case consts.SwaggerDataTypeInteger: + case enums.SwaggerDataTypeInteger.String(): if formatType == consts.DataTypeInt.String() { return consts.DataTypeInt.String() } return consts.DataTypeInt.String() - case "string", "apikey": + case enums.SwaggerDataTypeString.String(), enums.SwaggerDataTypeString.String(): return consts.DataTypeString.String() - case "object": + case enums.SwaggerDataTypeObject.String(): return consts.DataTypeMapStrAny.String() - case "boolean": + case enums.SwaggerDataTypeObject.String(): return consts.DataTypeBool.String() - case "number", "float", "double", "float64": + case enums.SwaggerDataTypeNumber.String(), "float", "double", "float64": return consts.DataTypeFloat64.String() case "float32": return consts.DataTypeFloat32.String() - case "array": + case enums.SwaggerDataTypeArray.String(): if formatType == "integer" { return consts.DataTypeSliceInt.String() } else if formatType == "string" { @@ -89,22 +91,18 @@ func GetDataType(docParamType string, formatType string) string { } // GetParamLocation 获取参数位置 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 12:02 2024/12/24 func GetParamLocation(docParamLocation string) consts.RequestDataLocation { docParamLocation = strings.ToLower(docParamLocation) switch docParamLocation { - case "query": + case enums.DocParamLocationQuery.String(): return consts.RequestDataLocationQuery - case "header": + case enums.DocParamLocationHeader.String(): return consts.RequestDataLocationHeader - case "cookie": + case enums.DocParamLocationCookie.String(): return consts.RequestDataLocationCookie - case "body": + case enums.DocParamLocationBody.String(): return consts.RequestDataLocationBody - case "path": + case enums.DocParamLocationPath.String(): return consts.RequestDataLocationUriPath default: return consts.RequestDataLocationQuery @@ -113,12 +111,12 @@ func GetParamLocation(docParamLocation string) consts.RequestDataLocation { // GetRealDefinitionsKey 通过schema下的 $ref 获取真实的 definitions key func GetRealDefinitionsKey(ref string) string { - return strings.TrimPrefix(ref, "#/definitions/") + return strings.TrimPrefix(ref, enums.RefPrefixSchemaDefinition.String()) } // GetRealResponseKey 通过schema下的 $ref 获取真实的 response key func GetRealResponseKey(ref string) string { - return strings.TrimPrefix(ref, "#/responses/") + return strings.TrimPrefix(ref, enums.RefPrefixSchemaResponse.String()) } // GetSuccessResponseConfig 获取成功的响应配置 @@ -133,7 +131,7 @@ func GetSuccessResponseConfig(resultConfig map[string]*define.SwaggerPathConfigR // DataTypeIsArray 判断数据类型是否为数组 func DataTypeIsArray(docDataType string) bool { - return strings.ToLower(docDataType) == "array" + return strings.ToLower(docDataType) == enums.SwaggerDataTypeArray.String() } // ExpandArrayParam 展开详细的数组配置 diff --git a/define/seagger_ui.go b/define/seagger_ui.go deleted file mode 100644 index df64281..0000000 --- a/define/seagger_ui.go +++ /dev/null @@ -1,15 +0,0 @@ -// Package define ... -// -// Description : define ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 2025-02-16 13:18 -package define - -const ( - SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 - SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 - SwaggerUIThemeYDocLucky = "ydoc-lucky-ui" // YDoc Lucky UI 主题: https://github.com/NoBugBoy/LuckyUI - SwaggerUIThemeRedocFree = "redoc-free" // redoc UI 主题, 开源免费版: https://github.com/Redocly/redoc -) diff --git a/enums/data_location.go b/enums/data_location.go new file mode 100644 index 0000000..76deb27 --- /dev/null +++ b/enums/data_location.go @@ -0,0 +1,22 @@ +// Package enums ... +// +// Description : enums ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-08-23 00:34 +package enums + +type DocParamLocation string + +func (dpl DocParamLocation) String() string { + return string(dpl) +} + +const ( + DocParamLocationQuery DocParamLocation = "query" + DocParamLocationHeader DocParamLocation = "header" + DocParamLocationCookie DocParamLocation = "cookie" + DocParamLocationBody DocParamLocation = "body" + DocParamLocationPath DocParamLocation = "path" +) diff --git a/enums/data_type.go b/enums/data_type.go index 529fbb6..b2930cc 100644 --- a/enums/data_type.go +++ b/enums/data_type.go @@ -42,4 +42,5 @@ const ( SwaggerDataTypeBoolean SwaggerDataType = "boolean" SwaggerDataTypeArray SwaggerDataType = "array" SwaggerDataTypeObject SwaggerDataType = "object" + SwaggerDataTypeApiKey SwaggerDataType = "apikey" ) diff --git a/enums/ref.go b/enums/ref.go new file mode 100644 index 0000000..ba87494 --- /dev/null +++ b/enums/ref.go @@ -0,0 +1,20 @@ +// Package enums ... +// +// Description : enums ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-08-23 00:40 +package enums + +// RefPrefix 各种ref引用的前缀定义 +type RefPrefix string + +func (rp RefPrefix) String() string { + return string(rp) +} + +const ( + RefPrefixSchemaDefinition RefPrefix = "#/definitions/" // schema下的 $ref 下 definitions 的前缀 + RefPrefixSchemaResponse RefPrefix = "#/responses/" // schema下的 $ref 下 response 的前缀 +) diff --git a/enums/ui_theme.go b/enums/ui_theme.go new file mode 100644 index 0000000..d2c4ced --- /dev/null +++ b/enums/ui_theme.go @@ -0,0 +1,21 @@ +// Package enums ... +// +// Description : enums ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-08-23 01:03 +package enums + +type SwaggerUITheme string + +func (sut SwaggerUITheme) String() string { + return string(sut) +} + +const ( + SwaggerUIThemeDefault SwaggerUITheme = "swaggerUI" // 文档默认主题 + SwaggerUIThemeKnife4go SwaggerUITheme = "knife4go" // knife4go 主题 + SwaggerUIThemeYDocLucky SwaggerUITheme = "ydoc-lucky-ui" // YDoc Lucky UI 主题: https://github.com/NoBugBoy/LuckyUI + SwaggerUIThemeRedocFree SwaggerUITheme = "redoc-free" // redoc UI 主题, 开源免费版: https://github.com/Redocly/redoc +) diff --git a/enums/version.go b/enums/version.go new file mode 100644 index 0000000..2708718 --- /dev/null +++ b/enums/version.go @@ -0,0 +1,19 @@ +// Package enums ... +// +// Description : enums ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-08-23 00:50 +package enums + +type SwaggerVersion string + +func (sv SwaggerVersion) String() string { + return string(sv) +} + +const ( + SwaggerDocVersion2 SwaggerVersion = "2.0" + SwaggerDocVersion3 SwaggerVersion = "3.0.0" +) diff --git a/generate.go b/generate.go index fa4351f..9b9be9c 100644 --- a/generate.go +++ b/generate.go @@ -10,12 +10,14 @@ package api_doc import ( "errors" "fmt" - "git.zhangdeman.cn/gateway/api-doc/define" - "git.zhangdeman.cn/zhangdeman/consts" - "git.zhangdeman.cn/zhangdeman/wrapper" "net/http" "reflect" "strings" + + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/gateway/api-doc/enums" + "git.zhangdeman.cn/zhangdeman/consts" + "git.zhangdeman.cn/zhangdeman/wrapper" ) // NewOpenapiDoc ... @@ -260,10 +262,6 @@ func (g *Generate) setApiDoc(baseCfg *define.UriBaseConfig, apiDocCfg *define.Pa } // getApiDocBaseCfg 获取接口文档的基础配置 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 16:10 2025/2/14 func (g *Generate) getApiDocBaseCfg(baseCfg *define.UriBaseConfig, paramType reflect.Type) *define.PathItemOperationConfig { cfg := &define.PathItemOperationConfig{ Tags: baseCfg.TagList, @@ -279,7 +277,7 @@ func (g *Generate) getApiDocBaseCfg(baseCfg *define.UriBaseConfig, paramType ref Ref: "", }, Responses: map[string]*define.Response{ - fmt.Sprintf("%v", http.StatusOK): &define.Response{ + fmt.Sprintf("%v", http.StatusOK): { Content: map[string]*define.Media{}, }, }, @@ -295,12 +293,12 @@ func (g *Generate) getApiDocBaseCfg(baseCfg *define.UriBaseConfig, paramType ref param = strings.TrimSuffix(param, "}") cfg.Parameters = append(cfg.Parameters, &define.PathConfigParameter{ Name: param, - In: consts.SwaggerParameterInPath, + In: enums.DocParamLocationPath.String(), Description: param, Required: true, Deprecated: false, Schema: &define.Schema{ - Type: consts.SwaggerDataTypeString, + Type: enums.SwaggerDataTypeString.String(), Format: consts.DataTypeString.String(), }, AllowEmptyValue: false, @@ -311,10 +309,6 @@ func (g *Generate) getApiDocBaseCfg(baseCfg *define.UriBaseConfig, paramType ref } // ParseReadConfigParam 解析get类请求参数 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 11:55 2025/2/14 func (g *Generate) ParseReadConfigParam(requestCfg *define.UriBaseConfig, baseReqCfg *define.PathItemOperationConfig, inputType reflect.Type) { if inputType.Kind() == reflect.Ptr { inputType = inputType.Elem() diff --git a/go.mod b/go.mod index aefb63d..5d41072 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.23.0 toolchain go1.24.1 require ( - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250425024726-cc17224cb995 git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20250504055908-8d68e6106ea9 git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740 github.com/gin-gonic/gin v1.10.1 diff --git a/go.sum b/go.sum index fc794b7..e56fe59 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250425024726-cc17224cb995 h1:LmPRAf0AsxRVFPibdpZR89ajlsz8hof2IvMMyTqiEq4= -git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250425024726-cc17224cb995/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= +git.zhangdeman.cn/zhangdeman/api-doc/enums v0.0.0-20250425024726-cc17224cb995 h1:LmPRAf0AsxRVFPibdpZR89ajlsz8hof2IvMMyTqiEq4= +git.zhangdeman.cn/zhangdeman/api-doc/enums v0.0.0-20250425024726-cc17224cb995/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 h1:gUDlQMuJ4xNfP2Abl1Msmpa3fASLWYkNlqDFF/6GN0Y= git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0/go.mod h1:VHb9qmhaPDAQDcS6vUiDCamYjZ4R5lD1XtVsh55KsMI= git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20250504055908-8d68e6106ea9 h1:/GLQaFoLb+ciHOtAS2BIyPNnf4O5ME3AC5PUaJY9kfs= diff --git a/parser.go b/parser.go index 5cd81a9..3547b8e 100644 --- a/parser.go +++ b/parser.go @@ -9,6 +9,7 @@ package api_doc import ( "errors" + "git.zhangdeman.cn/gateway/api-doc/define" "git.zhangdeman.cn/zhangdeman/serialize" ) diff --git a/struct_field.go b/struct_field.go index 97e603f..3c451d4 100644 --- a/struct_field.go +++ b/struct_field.go @@ -8,10 +8,11 @@ package api_doc import ( - "git.zhangdeman.cn/gateway/api-doc/define" "reflect" "strconv" "strings" + + "git.zhangdeman.cn/gateway/api-doc/define" ) var ( diff --git a/swagger.go b/swagger.go index a05fdb4..ccf499a 100644 --- a/swagger.go +++ b/swagger.go @@ -9,11 +9,12 @@ package api_doc import ( "errors" + "net/http" + "strings" + "git.zhangdeman.cn/gateway/api-doc/define" "git.zhangdeman.cn/zhangdeman/consts" "git.zhangdeman.cn/zhangdeman/serialize" - "net/http" - "strings" ) // ParseSwagger2 解析swagger2.0版本文档 diff --git a/swagger/parser.go b/swagger/parser.go index 868de31..640c60a 100644 --- a/swagger/parser.go +++ b/swagger/parser.go @@ -10,12 +10,12 @@ package swagger import ( "errors" "fmt" - apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" - "git.zhangdeman.cn/zhangdeman/consts" - "git.zhangdeman.cn/zhangdeman/wrapper" "net/http" "sort" "strings" + + apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/zhangdeman/wrapper" ) // HandleOpenapiDocRes ... diff --git a/swagger/run.go b/swagger/run.go index 11c7a39..8301d5c 100644 --- a/swagger/run.go +++ b/swagger/run.go @@ -8,12 +8,12 @@ package swagger import ( - "git.zhangdeman.cn/gateway/api-doc/define" - "git.zhangdeman.cn/gateway/api-doc/util" - "git.zhangdeman.cn/zhangdeman/consts" - "git.zhangdeman.cn/zhangdeman/wrapper" "net/http" "strings" + + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/gateway/api-doc/util" + "git.zhangdeman.cn/zhangdeman/wrapper" ) // Generate 生成文档 @@ -288,7 +288,7 @@ func generateParameterDefinitions(swaggerInfo *define.Swagger, uri string, paren AllOf: nil, } if itemSwaggerDefinition.Type == consts.SwaggerDataTypeObject { - itemSwaggerDefinition.AllOf = []map[string]string{map[string]string{ + itemSwaggerDefinition.AllOf = []map[string]string{{ consts.SwaggerRefKey: getRefValue(parentPath + "." + subPathArr[0]), }} } else if itemSwaggerDefinition.Type == consts.SwaggerDataTypeArray { diff --git a/swagger/run_test.go b/swagger/run_test.go index c204afc..5779d94 100644 --- a/swagger/run_test.go +++ b/swagger/run_test.go @@ -10,10 +10,10 @@ package swagger import ( "encoding/json" "fmt" - "git.zhangdeman.cn/gateway/api-doc/define" - "git.zhangdeman.cn/zhangdeman/consts" "net/http" "testing" + + "git.zhangdeman.cn/gateway/api-doc/define" ) func TestGenerate(t *testing.T) { @@ -37,7 +37,7 @@ func TestGenerate(t *testing.T) { Version: "", }, PathConfigList: []*define.SwaggerPathInput{ - &define.SwaggerPathInput{ + { Uri: "/test", Method: http.MethodPost, ContentType: consts.MimeTypeJson, @@ -45,7 +45,7 @@ func TestGenerate(t *testing.T) { Description: "测试接口", TagList: []string{"测试接口生成"}, ParameterList: []*define.SwaggerParameterInput{ - &define.SwaggerParameterInput{ + { Type: consts.DataTypeString.String(), Description: "姓名", Name: "name", @@ -53,7 +53,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: []interface{}{"zhang", "de", "man"}, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeString.String(), Description: "性别", Name: "person.sex", @@ -61,7 +61,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: []interface{}{"man", "woman", "other"}, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeString.String(), Description: "性别", Name: "person.job.list.[]", @@ -69,7 +69,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: nil, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeInt.String(), Description: "年份", Name: "person.job.year.[]", @@ -77,7 +77,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: nil, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeInt.String(), Description: "测试工作", Name: "person.job.test", @@ -85,7 +85,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: nil, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeInt.String(), Description: "年龄", Name: "age", @@ -93,7 +93,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: []interface{}{18, 19, 20}, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeInt.String(), Description: "年龄", Name: "test_list.[].age", @@ -101,7 +101,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: []interface{}{18, 19, 20}, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeString.String(), Description: "年龄", Name: "test_list.[].name", @@ -109,7 +109,7 @@ func TestGenerate(t *testing.T) { Required: true, EnumList: nil, }, - &define.SwaggerParameterInput{ + { Type: consts.DataTypeMapAnyAny.String(), Description: "测试global_map", Name: "obj", @@ -119,32 +119,32 @@ func TestGenerate(t *testing.T) { }, }, ResponseList: []*define.SwaggerResponseInput{ - &define.SwaggerResponseInput{ + { Code: "200", Description: "成功", List: []*define.SwaggerResponseItemInput{ - &define.SwaggerResponseItemInput{ + { Type: consts.DataTypeString.String(), Description: "姓名", Field: "nick_name", IsRequired: false, }, - &define.SwaggerResponseItemInput{ + { Type: consts.DataTypeString.String(), Description: "昵称", Field: "person.nick_name", - IsRequired: false, - }, - &define.SwaggerResponseItemInput{ - Type: consts.DataTypeMapAnyAny.String(), - Description: "测试返回生成map", - Field: "obj", - IsRequired: false, + IsRequired: false, + }, + { + Type: consts.DataTypeMapAnyAny.String(), + Description: "测试返回生成map", + Field: "obj", + IsRequired: false, + }, + }, + }, }, }, - }, - }, - }, }, }) byteData, _ := json.MarshalIndent(res, "", "\t") diff --git a/swagger_ui.go b/swagger_ui.go index b29fb49..bab5f24 100644 --- a/swagger_ui.go +++ b/swagger_ui.go @@ -10,16 +10,18 @@ package api_doc import ( "embed" "fmt" + "net/http" + "path/filepath" + "strings" + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/gateway/api-doc/enums" "git.zhangdeman.cn/zhangdeman/consts" "github.com/gin-gonic/gin" knife4goFiles "github.com/go-webtools/knife4go" knife4goGin "github.com/go-webtools/knife4go/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" - "net/http" - "path/filepath" - "strings" ) //go:embed ydoc-lucky-ui/* @@ -29,11 +31,7 @@ var ydocUIFiles embed.FS var redocFreeIndexContent string // NewSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:21 2025/2/15 -func NewSwaggerUI(info *define.Info, servers []*define.ServerItem, uiTheme string) *SwaggerUI { +func NewSwaggerUI(info *define.Info, servers []*define.ServerItem, uiTheme enums.SwaggerUITheme) *SwaggerUI { return &SwaggerUI{ docInstance: NewOpenapiDoc(info, servers), uiTheme: uiTheme, @@ -41,26 +39,18 @@ func NewSwaggerUI(info *define.Info, servers []*define.ServerItem, uiTheme strin } type SwaggerUI struct { - docInstance *Generate // 文档实例 - uiTheme string // 文档主题, swaggerUI / knife4go, 默认 knife4go + docInstance *Generate // 文档实例 + uiTheme enums.SwaggerUITheme // 文档主题, swaggerUI / knife4go, 默认 knife4go router *gin.Engine baseUri string } // DocInstance 文档实例 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 13:23 2025/2/16 func (su *SwaggerUI) DocInstance() *Generate { return su.docInstance } // RegisterHandler ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 15:00 2025/2/16 func (su *SwaggerUI) RegisterHandler(router *gin.Engine, baseUri string) { su.router = router baseUri = strings.TrimRight(baseUri, "/") @@ -80,7 +70,7 @@ func (su *SwaggerUI) RegisterHandler(router *gin.Engine, baseUri string) { { "name": "服务文档", "url": "doc.json", - "swaggerVersion": consts.SwaggerDocVersion3, + "swaggerVersion": enums.SwaggerDocVersion3.String(), }, }) ctx.Abort() @@ -92,7 +82,7 @@ func (su *SwaggerUI) RegisterHandler(router *gin.Engine, baseUri string) { { "name": "服务文档", "url": baseUri + "/doc.json", - "swaggerVersion": consts.SwaggerDocVersion3, + "swaggerVersion": enums.SwaggerDocVersion3.String(), }, }) // ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) @@ -100,20 +90,16 @@ func (su *SwaggerUI) RegisterHandler(router *gin.Engine, baseUri string) { } // Handler 访问文档的接口处理 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:34 2025/2/15 func (su *SwaggerUI) Handler() func(ctx *gin.Context) { switch su.uiTheme { - case define.SwaggerUIThemeKnife4go: + case enums.SwaggerUIThemeKnife4go: return su.HandleKnife4goUI() - case define.SwaggerUIThemeYDocLucky: + case enums.SwaggerUIThemeYDocLucky: // YDoc-Lucky-UI 主题处理 return su.HandleLuckyUI() - case define.SwaggerUIThemeDefault: + case enums.SwaggerUIThemeDefault: return su.HandleSwaggerUI() - case define.SwaggerUIThemeRedocFree: + case enums.SwaggerUIThemeRedocFree: // redoc免费版 return su.HandleRedocFreeUI() default: @@ -122,15 +108,11 @@ func (su *SwaggerUI) Handler() func(ctx *gin.Context) { } // HandleLuckyUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 16:04 2025/2/16 func (su *SwaggerUI) HandleLuckyUI() func(ctx *gin.Context) { // su.router.StaticFS(su.baseUri+"/assets", http.FS(ydocUIFiles)) return func(ctx *gin.Context) { fileRealPath := strings.TrimPrefix(ctx.Request.RequestURI, su.baseUri) - byteData, _ := ydocUIFiles.ReadFile(filepath.Join(define.SwaggerUIThemeYDocLucky, fileRealPath)) + byteData, _ := ydocUIFiles.ReadFile(filepath.Join(enums.SwaggerUIThemeYDocLucky.String(), fileRealPath)) if strings.HasSuffix(ctx.Request.RequestURI, "html") { byteData = []byte(strings.ReplaceAll(string(byteData), "{{BASE_URI}}", su.baseUri)) } @@ -141,17 +123,13 @@ func (su *SwaggerUI) HandleLuckyUI() func(ctx *gin.Context) { } else if strings.HasSuffix(ctx.Request.RequestURI, "js") { contentType = "application/javascript" } - ctx.Header("Content-Type", contentType) + ctx.Header(consts.HeaderKeyContentType.String(), contentType) ctx.String(http.StatusOK, string(byteData)) ctx.Abort() } } // HandleKnife4goUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:38 2025/2/15 func (su *SwaggerUI) HandleKnife4goUI() func(ctx *gin.Context) { resetOption := func(cfg *knife4goGin.Config) { if nil == cfg { @@ -163,19 +141,11 @@ func (su *SwaggerUI) HandleKnife4goUI() func(ctx *gin.Context) { } // HandleSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:41 2025/2/15 func (su *SwaggerUI) HandleSwaggerUI() func(ctx *gin.Context) { return ginSwagger.WrapHandler(swaggerFiles.Handler) } // HandleRedocFreeUI 处理redoc_free主题 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 16:40 2025/2/18 func (su *SwaggerUI) HandleRedocFreeUI() func(ctx *gin.Context) { return func(ctx *gin.Context) { // TODO : 这部分数据支持外部传参替换 @@ -188,7 +158,7 @@ func (su *SwaggerUI) HandleRedocFreeUI() func(ctx *gin.Context) { for k, v := range replaceTable { redocFreeIndexContent = strings.ReplaceAll(redocFreeIndexContent, k, v) } - ctx.Header("Content-Type", "text/html; charset=utf-8") + ctx.Header(consts.HeaderKeyContentType.String(), "text/html; charset=utf-8") ctx.String(http.StatusOK, redocFreeIndexContent) ctx.Abort() } diff --git a/util/tool.go b/util/tool.go index 4419a44..5cdb977 100644 --- a/util/tool.go +++ b/util/tool.go @@ -8,7 +8,6 @@ package util import ( - "git.zhangdeman.cn/zhangdeman/consts" "net/http" "strings" ) diff --git a/validate_rule.go b/validate_rule.go index 9b2443e..144bbd0 100644 --- a/validate_rule.go +++ b/validate_rule.go @@ -8,10 +8,11 @@ package api_doc import ( - "git.zhangdeman.cn/zhangdeman/consts" "reflect" "strconv" "strings" + + "git.zhangdeman.cn/zhangdeman/consts" ) var ( @@ -33,10 +34,6 @@ func (r validateRule) IsRequired(structField reflect.StructField) bool { } // Enum 获取枚举值 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 17:23 2025/2/13 func (r validateRule) Enum(structField reflect.StructField) []any { ruleTable := r.getValidateRuleTable(structField) oneOfValue, _ := ruleTable[consts.ValidatorRuleCommonOneOf.String()] @@ -79,10 +76,6 @@ func (r validateRule) Enum(structField reflect.StructField) []any { } // Minimum 最小值 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:51 2025/2/18 func (r validateRule) Minimum(structField reflect.StructField) *int64 { ruleTable := r.getValidateRuleTable(structField) var ( @@ -118,10 +111,6 @@ func (r validateRule) Minimum(structField reflect.StructField) *int64 { } // Maximum 最大值 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 22:00 2025/2/18 func (r validateRule) Maximum(structField reflect.StructField) *int64 { ruleTable := r.getValidateRuleTable(structField) var ( @@ -157,10 +146,6 @@ func (r validateRule) Maximum(structField reflect.StructField) *int64 { } // getValidateRuleTable 解析验证规则表 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 15:29 2025/2/13 func (r validateRule) getValidateRuleTable(structField reflect.StructField) map[string]string { res := map[string]string{} ruleStr := ParseStructFieldTag.GetValidateRule(structField)