// Package construct ... // // Author : go_developer@163.com<白茶清欢> // // Date : 1:23 下午 2021/8/7 package construct import ( "git.zhangdeman.cn/zhangdeman/center-config/dao" "git.zhangdeman.cn/zhangdeman/center-config/define/config" "git.zhangdeman.cn/zhangdeman/center-config/manager" "git.zhangdeman.cn/zhangdeman/center-config/response" "git.zhangdeman.cn/zhangdeman/gopkg/middleware/mysql" "git.zhangdeman.cn/zhangdeman/gopkg/util" "github.com/gin-gonic/gin" "go.uber.org/zap/zapcore" ) var ( // ProjectPath 项目路径 ProjectPath string // Env 运行环境 Env string ) // Bootstrap 引导服务启动 // // Author : go_developer@163.com<白茶清欢> // // Date : 1:25 下午 2021/8/7 func Bootstrap(router *gin.Engine) error { // 初始化 if len(Env) == 0 { Env = "product" } ProjectPath, _ = util.GetProjectPath() // 初始化数据库 if err := InitDatabase(); nil != err { return nil } // 初始化各种管理实例 manager.Init() // 初始化请求路由 initRouter(router) return nil } // InitDatabase 初始化数据库 // // Author : go_developer@163.com<白茶清欢> // // Date : 1:27 下午 2021/8/7 func InitDatabase() error { // 读取数据库配置, 并初始化 var ( err error dbConfig config.Database ) if err = util.ReadYmlConfig(ProjectPath+"/etc/database/"+Env+".yml", &dbConfig); nil != err { return err } if err = dao.InitDatabase(dbConfig.DB, &mysql.LogConfig{ Level: zapcore.Level(dbConfig.Log.Level), ConsoleOutput: dbConfig.Log.Console, SplitConfig: dbConfig.Log.Split, ExtractFieldList: dbConfig.Log.ExtractFieldList, TraceFieldName: dbConfig.Log.TraceFieldName, }); nil != err { return err } return nil } // initRouter 初始化路由 // // Author : go_developer@163.com<白茶清欢> // // Date : 6:34 下午 2021/8/9 func initRouter(router *gin.Engine) { // 创建命名空间 router.POST("/namespace/create", func(ctx *gin.Context) { createForm, err := manager.Namespace.ValidateCreateForm(ctx) if nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } if err := manager.Namespace.Create(createForm); nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } response.ManagerAPISuccess(ctx, map[string]interface{}{}) }) // 激活命名空间 router.POST("/namespace/active", func(ctx *gin.Context) { activeForm, err := manager.Namespace.ValidateActiveForm(ctx) if nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } if err := manager.Namespace.Active(activeForm); nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } response.ManagerAPISuccess(ctx, map[string]interface{}{}) }) // 新增配置 router.POST("/config/create", func(ctx *gin.Context) { createForm, err := manager.Config.ValidateCreateOrUpdateConfigForm(ctx) if nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } if err := manager.Config.Create(createForm, nil); nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } response.ManagerAPISuccess(ctx, map[string]interface{}{}) }) // 修改配置 router.POST("/config/update", func(ctx *gin.Context) { updateForm, err := manager.Config.ValidateCreateOrUpdateConfigForm(ctx) if nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } if err := manager.Config.Update(updateForm, nil, nil); nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } response.ManagerAPISuccess(ctx, map[string]interface{}{}) }) // 设置配置 router.POST("/config/set", func(ctx *gin.Context) { createOrUpdateForm, err := manager.Config.ValidateCreateOrUpdateConfigForm(ctx) if nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } if err := manager.Config.CreateOrUpdateConfig(createOrUpdateForm); nil != err { response.ManagerAPIFail(ctx, -1, map[string]interface{}{"reason": err.Error()}) return } response.ManagerAPISuccess(ctx, map[string]interface{}{}) }) // 读取配置(从内存读取) router.GET("/config/read", func(ctx *gin.Context) { namespaceName := ctx.DefaultQuery("namespace", "") key := ctx.DefaultQuery("key", "") if len(namespaceName) == 0 || len(key) == 0 { response.ReadConfigAPISuccess(ctx, `param fail : namespace and key are required`) return } response.ReadConfigAPISuccess(ctx, manager.Storage.GetConf(namespaceName, key)) }) if err := router.Run(":10998"); nil != err { panic("端口监听失败 : " + err.Error()) } }