// Package router ... // // Description : router ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-02-18 17:26 package router import ( "strings" apiDocDefine "git.zhangdeman.cn/zhangdeman/api-doc/define" "git.zhangdeman.cn/zhangdeman/gin/middleware" "github.com/gin-gonic/gin" ) type SetServerOptionFunc func(so *serverOption) // serverOption 获取server实例的选项 type serverOption struct { swaggerUiTheme string // swagger 主题 swaggerBaseUri string // swagger基础path globalMiddlewareList []gin.HandlerFunc // 全局中间件列表 disableSwaggerDoc bool // 禁用swagger文档, 特定环境不想展示文档, 可通过次方式禁用 serverInfo *apiDocDefine.Info // 服务器信息 serverList []*apiDocDefine.ServerItem // 服务器环境列表 enablePprof bool // 启用pprof enableCors bool // 启动跨域支持 disableInitRequest bool // 禁用初始化请求 loggerCfg *middleware.AccessConfig // 日志配置 initContextData gin.HandlerFunc // 初始化一些请求数据 } // WithDisableInitRequest 禁用自从初始化请求 func WithDisableInitRequest(disable bool) SetServerOptionFunc { return func(so *serverOption) { so.disableInitRequest = disable } } // WithInitContextData 初始化一些请求数据 func WithInitContextData(formatFunc func(ctx *gin.Context) map[string]any) SetServerOptionFunc { return func(so *serverOption) { if nil == formatFunc { return } f := func(ctx *gin.Context) { data := formatFunc(ctx) for k, v := range data { ctx.Set(k, v) } } so.initContextData = f } } // WithSwaggerUITheme 设置swaggerUI主题 func WithSwaggerUITheme(uiTheme string) SetServerOptionFunc { return func(so *serverOption) { uiTheme = strings.TrimSpace(uiTheme) if len(uiTheme) == 0 { return } so.swaggerUiTheme = uiTheme } } // WithGlobalMiddlewareList 设置全局中间件 func WithGlobalMiddlewareList(middlewareList ...gin.HandlerFunc) SetServerOptionFunc { return func(so *serverOption) { so.globalMiddlewareList = middlewareList } } // WithSwaggerBaseUri ... 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文档 func WithDisableSwaggerDoc() SetServerOptionFunc { return func(so *serverOption) { so.disableSwaggerDoc = true } } // WithServerInfo 设置serverInfo func WithServerInfo(serverInfo *apiDocDefine.Info) SetServerOptionFunc { return func(so *serverOption) { if nil == serverInfo { return } so.serverInfo = serverInfo } } // WithServerList 设置服务器列表 func WithServerList(serverList []*apiDocDefine.ServerItem) SetServerOptionFunc { return func(so *serverOption) { if len(serverList) == 0 { return } so.serverList = serverList } } // WithPprofEnable 启用pprof func WithPprofEnable() SetServerOptionFunc { return func(so *serverOption) { so.enablePprof = true } } // WithEnableCors 启用全局跨域 func WithEnableCors() SetServerOptionFunc { return func(so *serverOption) { so.enableCors = true } } // WithLoggerCfg ... func WithLoggerCfg(loggerCfg *middleware.AccessConfig) SetServerOptionFunc { return func(so *serverOption) { if nil != loggerCfg || nil != loggerCfg.Logger { so.loggerCfg = loggerCfg } } }