2025-02-18 17:27:03 +08:00
|
|
|
// Package router ...
|
|
|
|
//
|
|
|
|
// Description : router ...
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 2025-02-18 17:26
|
|
|
|
package router
|
2025-02-18 18:12:44 +08:00
|
|
|
|
|
|
|
import (
|
|
|
|
apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define"
|
2025-02-22 15:45:30 +08:00
|
|
|
"git.zhangdeman.cn/zhangdeman/gin/middleware"
|
2025-02-18 18:12:44 +08:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type SetServerOptionFunc func(so *serverOption)
|
|
|
|
|
|
|
|
// serverOption 获取server实例的选项
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:28 2025/2/18
|
|
|
|
type serverOption struct {
|
|
|
|
swaggerUiTheme string // swagger 主题
|
|
|
|
swaggerBaseUri string // swagger基础path
|
|
|
|
globalMiddlewareList []gin.HandlerFunc // 全局中间件列表
|
|
|
|
disableSwaggerDoc bool // 禁用swagger文档, 特定环境不想展示文档, 可通过次方式禁用
|
|
|
|
serverInfo *apiDocDefine.Info // 服务器信息
|
|
|
|
serverList []*apiDocDefine.ServerItem // 服务器环境列表
|
2025-02-21 15:16:43 +08:00
|
|
|
enablePprof bool // 启用pprof
|
2025-02-22 15:00:37 +08:00
|
|
|
enableRequestInit bool // 初始化请求,生成trace_id 设置请求时间等
|
|
|
|
enableCors bool // 启动跨域支持
|
2025-02-22 15:45:30 +08:00
|
|
|
loggerCfg *middleware.AccessConfig // 日志配置
|
2025-02-18 18:12:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// WithSwaggerUITheme 设置swaggerUI主题
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:29 2025/2/18
|
|
|
|
func WithSwaggerUITheme(uiTheme string) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
uiTheme = strings.TrimSpace(uiTheme)
|
|
|
|
if len(uiTheme) == 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
so.swaggerUiTheme = uiTheme
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithGlobalMiddlewareList 设置全局中间件
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:33 2025/2/18
|
|
|
|
func WithGlobalMiddlewareList(middlewareList ...gin.HandlerFunc) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
so.globalMiddlewareList = middlewareList
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithSwaggerBaseUri ...
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 18:05 2025/2/18
|
|
|
|
func WithSwaggerBaseUri(baseUri string) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
baseUri = strings.TrimSpace(baseUri)
|
|
|
|
if len(baseUri) == 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
baseUri = "/" + strings.TrimLeft(baseUri, "/")
|
|
|
|
so.swaggerBaseUri = baseUri
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithDisableSwaggerDoc 禁用swagger文档
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:35 2025/2/18
|
|
|
|
func WithDisableSwaggerDoc() SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
so.disableSwaggerDoc = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithServerInfo 设置serverInfo
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:51 2025/2/18
|
|
|
|
func WithServerInfo(serverInfo *apiDocDefine.Info) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
if nil == serverInfo {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
so.serverInfo = serverInfo
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithServerList 设置服务器列表
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 17:52 2025/2/18
|
|
|
|
func WithServerList(serverList []*apiDocDefine.ServerItem) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
if len(serverList) == 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
so.serverList = serverList
|
|
|
|
}
|
|
|
|
}
|
2025-02-21 15:16:43 +08:00
|
|
|
|
|
|
|
// WithPprofEnable 启用pprof
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 15:10 2025/2/21
|
|
|
|
func WithPprofEnable() SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
so.enablePprof = true
|
|
|
|
}
|
|
|
|
}
|
2025-02-22 15:00:37 +08:00
|
|
|
|
|
|
|
// WithEnableRequestInit 全局配置初始化
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 14:56 2025/2/22
|
|
|
|
func WithEnableRequestInit() SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
so.enableRequestInit = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithEnableCors 启用全局跨域
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 14:56 2025/2/22
|
|
|
|
func WithEnableCors() SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
so.enableCors = true
|
|
|
|
}
|
|
|
|
}
|
2025-02-22 15:45:30 +08:00
|
|
|
|
|
|
|
// WithLoggerCdg ...
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
|
|
//
|
|
|
|
// Date : 15:25 2025/2/22
|
|
|
|
func WithLoggerCdg(loggerCfg *middleware.AccessConfig) SetServerOptionFunc {
|
|
|
|
return func(so *serverOption) {
|
|
|
|
if nil == loggerCfg || nil == loggerCfg.Logger {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
so.loggerCfg = loggerCfg
|
|
|
|
}
|
|
|
|
}
|