upgrade: 优化部分代码, 部分内容待配置化

This commit is contained in:
2025-08-23 01:09:57 +08:00
parent 14e56e4caf
commit bac8242f5e
19 changed files with 169 additions and 153 deletions

View File

@ -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 展开详细的数组配置

View File

@ -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
)

22
enums/data_location.go Normal file
View File

@ -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"
)

View File

@ -42,4 +42,5 @@ const (
SwaggerDataTypeBoolean SwaggerDataType = "boolean"
SwaggerDataTypeArray SwaggerDataType = "array"
SwaggerDataTypeObject SwaggerDataType = "object"
SwaggerDataTypeApiKey SwaggerDataType = "apikey"
)

20
enums/ref.go Normal file
View File

@ -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 的前缀
)

21
enums/ui_theme.go Normal file
View File

@ -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
)

19
enums/version.go Normal file
View File

@ -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"
)

View File

@ -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()

1
go.mod
View File

@ -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

4
go.sum
View File

@ -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=

View File

@ -9,6 +9,7 @@ package api_doc
import (
"errors"
"git.zhangdeman.cn/gateway/api-doc/define"
"git.zhangdeman.cn/zhangdeman/serialize"
)

View File

@ -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 (

View File

@ -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版本文档

View File

@ -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 ...

View File

@ -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 {

View File

@ -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")

View File

@ -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()
}

View File

@ -8,7 +8,6 @@
package util
import (
"git.zhangdeman.cn/zhangdeman/consts"
"net/http"
"strings"
)

View File

@ -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)