From 57d128144d023aacc55054fa6399b0a4ee4d1292 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Wed, 14 Jul 2021 11:48:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=E2=9C=A8:=20=20Add=20the=20createapp?= =?UTF-8?q?=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/app/server.go | 90 +++++++++++++++++++++++++++++++++++++++ template/cmd_api.template | 8 ++++ template/router.template | 78 +++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 cmd/app/server.go create mode 100644 template/cmd_api.template create mode 100644 template/router.template diff --git a/cmd/app/server.go b/cmd/app/server.go new file mode 100644 index 00000000..8eaae50e --- /dev/null +++ b/cmd/app/server.go @@ -0,0 +1,90 @@ +package app + +import ( + "bytes" + "errors" + "fmt" + "github.com/go-admin-team/go-admin-core/sdk/pkg" + "github.com/go-admin-team/go-admin-core/sdk/pkg/utils" + "github.com/spf13/cobra" + "text/template" +) + +var ( + appName string + StartCmd = &cobra.Command{ + Use: "createapp", + Short: "Create a new app", + Long: "Use when you need to create a new app", + Example: "go-admin createapp -n admin", + Run: func(cmd *cobra.Command, args []string) { + run() + }, + } +) + +func init() { + StartCmd.PersistentFlags().StringVarP(&appName, "name", "n", "", "Start server with provided configuration file") +} + +func run() { + + fmt.Println(`start init`) + //1. 读取配置 + + fmt.Println(`generate migration file`) + _ = genFile() + +} + +func genFile() error { + if appName == "" { + return errors.New("arg `name` invalid :name is empty") + } + path := "app/" + appPath := path + appName + err := utils.IsNotExistMkDir(appPath) + if err != nil { + return err + } + apiPath := appPath + "/apis/" + err = utils.IsNotExistMkDir(apiPath) + if err != nil { + return err + } + modelsPath := appPath + "/models/" + err = utils.IsNotExistMkDir(modelsPath) + if err != nil { + return err + } + routerPath := appPath + "/router/" + err = utils.IsNotExistMkDir(routerPath) + if err != nil { + return err + } + servicePath := appPath + "/service/" + err = utils.IsNotExistMkDir(servicePath) + if err != nil { + return err + } + dtoPath := appPath + "/service/dto/" + err = utils.IsNotExistMkDir(dtoPath) + if err != nil { + return err + } + + t1, err := template.ParseFiles("template/cmd_api.template") + if err != nil { + return err + } + m := map[string]string{} + m["appName"] = appName + var b1 bytes.Buffer + err = t1.Execute(&b1, m) + pkg.FileCreate(b1, "./cmd/api/"+appName+".go") + t2, err := template.ParseFiles("template/router.template") + var b2 bytes.Buffer + err = t2.Execute(&b2, nil) + pkg.FileCreate(b2, appPath+"/router/router.go") + return nil +} \ No newline at end of file diff --git a/template/cmd_api.template b/template/cmd_api.template new file mode 100644 index 00000000..f58e37fc --- /dev/null +++ b/template/cmd_api.template @@ -0,0 +1,8 @@ +package api + +import "go-admin/app/{{.appName}}/router" + +func init() { + //注册路由 fixme 其他应用的路由,在本目录新建文件放在init方法 + AppRouters = append(AppRouters, router.InitRouter) +} \ No newline at end of file diff --git a/template/router.template b/template/router.template new file mode 100644 index 00000000..16cb45a9 --- /dev/null +++ b/template/router.template @@ -0,0 +1,78 @@ +package router + + +import ( + "github.com/gin-gonic/gin" + _ "github.com/gin-gonic/gin" + log "github.com/go-admin-team/go-admin-core/logger" + "github.com/go-admin-team/go-admin-core/sdk" + "github.com/go-admin-team/go-admin-core/sdk/pkg" + "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth" + jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth" + common "go-admin/common/middleware" + "os" +) + +var ( + routerNoCheckRole = make([]func(*gin.RouterGroup), 0) + routerCheckRole = make([]func(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware), 0) +) + +// InitRouter 路由初始化 +func InitRouter() { + var r *gin.Engine + h := sdk.Runtime.GetEngine() + if h == nil { + h = gin.New() + sdk.Runtime.SetEngine(h) + } + switch h.(type) { + case *gin.Engine: + r = h.(*gin.Engine) + default: + log.Fatal("not support other engine") + os.Exit(-1) + } + + r.Use(common.Sentinel()). + Use(common.RequestId(pkg.TrafficKey)) + common.InitMiddleware(r) + // the jwt middleware + authMiddleware, err := common.AuthInit() + if err != nil { + log.Fatalf("JWT Init Error, %s", err.Error()) + } + + // 注册业务路由 + InitBusinessRouter(r, authMiddleware) +} + +func InitBusinessRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.Engine { + + // 无需认证的路由 + noCheckRoleRouter(r) + // 需要认证的路由 + checkRoleRouter(r, authMiddleware) + + return r +} + +// noCheckRoleRouter 无需认证的路由 +func noCheckRoleRouter(r *gin.Engine) { + // 可根据业务需求来设置接口版本 + v := r.Group("") + + for _, f := range routerNoCheckRole { + f(v) + } +} + +// checkRoleRouter 需要认证的路由 +func checkRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddleware) { + // 可根据业务需求来设置接口版本 + v := r.Group("") + + for _, f := range routerCheckRole { + f(v, authMiddleware) + } +} \ No newline at end of file From 411b85afcda5539497dc6cd49a9a3510efbc5d5c Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Wed, 14 Jul 2021 11:49:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?publish=F0=9F=9A=80:=20=202.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/global/adm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/global/adm.go b/common/global/adm.go index b1ffae93..2cb89785 100644 --- a/common/global/adm.go +++ b/common/global/adm.go @@ -2,7 +2,7 @@ package global const ( // Version go-admin version info - Version = "2.0.0-beta.11" + Version = "2.0.0" ) var (