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