mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
feat: Support projectPkg template variables in config, handler, logic, main, and svc template files (#4939)
This commit is contained in:
@@ -90,23 +90,23 @@ func DoGenProject(apiFile, dir, style string, withTest bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logx.Must(pathx.MkdirIfNotExist(dir))
|
logx.Must(pathx.MkdirIfNotExist(dir))
|
||||||
rootPkg, err := golang.GetParentPackage(dir)
|
rootPkg, projectPkg, err := golang.GetParentPackage(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
logx.Must(genEtc(dir, cfg, api))
|
logx.Must(genEtc(dir, cfg, api))
|
||||||
logx.Must(genConfig(dir, cfg, api))
|
logx.Must(genConfig(dir, projectPkg, cfg, api))
|
||||||
logx.Must(genMain(dir, rootPkg, cfg, api))
|
logx.Must(genMain(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genServiceContext(dir, rootPkg, cfg, api))
|
logx.Must(genServiceContext(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genTypes(dir, cfg, api))
|
logx.Must(genTypes(dir, cfg, api))
|
||||||
logx.Must(genRoutes(dir, rootPkg, cfg, api))
|
logx.Must(genRoutes(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genHandlers(dir, rootPkg, cfg, api))
|
logx.Must(genHandlers(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genLogic(dir, rootPkg, cfg, api))
|
logx.Must(genLogic(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genMiddleware(dir, cfg, api))
|
logx.Must(genMiddleware(dir, cfg, api))
|
||||||
if withTest {
|
if withTest {
|
||||||
logx.Must(genHandlersTest(dir, rootPkg, cfg, api))
|
logx.Must(genHandlersTest(dir, rootPkg, projectPkg, cfg, api))
|
||||||
logx.Must(genLogicTest(dir, rootPkg, cfg, api))
|
logx.Must(genLogicTest(dir, rootPkg, projectPkg, cfg, api))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := backupAndSweep(apiFile); err != nil {
|
if err := backupAndSweep(apiFile); err != nil {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const (
|
|||||||
//go:embed config.tpl
|
//go:embed config.tpl
|
||||||
var configTemplate string
|
var configTemplate string
|
||||||
|
|
||||||
func genConfig(dir string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genConfig(dir, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
filename, err := format.FileNamingFormat(cfg.NamingFormat, configFile)
|
filename, err := format.FileNamingFormat(cfg.NamingFormat, configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -60,6 +60,7 @@ func genConfig(dir string, cfg *config.Config, api *spec.ApiSpec) error {
|
|||||||
"authImport": authImportStr,
|
"authImport": authImportStr,
|
||||||
"auth": strings.Join(auths, "\n"),
|
"auth": strings.Join(auths, "\n"),
|
||||||
"jwtTrans": strings.Join(jwtTransList, "\n"),
|
"jwtTrans": strings.Join(jwtTransList, "\n"),
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ var (
|
|||||||
sseHandlerTemplate string
|
sseHandlerTemplate string
|
||||||
)
|
)
|
||||||
|
|
||||||
func genHandler(dir, rootPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
func genHandler(dir, rootPkg, projectPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
||||||
handler := getHandlerName(route)
|
handler := getHandlerName(route)
|
||||||
handlerPath := getHandlerFolderPath(group, route)
|
handlerPath := getHandlerFolderPath(group, route)
|
||||||
pkgName := handlerPath[strings.LastIndex(handlerPath, "/")+1:]
|
pkgName := handlerPath[strings.LastIndex(handlerPath, "/")+1:]
|
||||||
@@ -63,14 +63,15 @@ func genHandler(dir, rootPkg string, cfg *config.Config, group spec.Group, route
|
|||||||
"HasRequest": len(route.RequestTypeName()) > 0,
|
"HasRequest": len(route.RequestTypeName()) > 0,
|
||||||
"HasDoc": len(route.JoinedDoc()) > 0,
|
"HasDoc": len(route.JoinedDoc()) > 0,
|
||||||
"Doc": getDoc(route.JoinedDoc()),
|
"Doc": getDoc(route.JoinedDoc()),
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func genHandlers(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genHandlers(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
for _, group := range api.Service.Groups {
|
for _, group := range api.Service.Groups {
|
||||||
for _, route := range group.Routes {
|
for _, route := range group.Routes {
|
||||||
if err := genHandler(dir, rootPkg, cfg, group, route); err != nil {
|
if err := genHandler(dir, rootPkg, projectPkg, cfg, group, route); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
//go:embed handler_test.tpl
|
//go:embed handler_test.tpl
|
||||||
var handlerTestTemplate string
|
var handlerTestTemplate string
|
||||||
|
|
||||||
func genHandlerTest(dir, rootPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
func genHandlerTest(dir, rootPkg, projectPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
||||||
handler := getHandlerName(route)
|
handler := getHandlerName(route)
|
||||||
handlerPath := getHandlerFolderPath(group, route)
|
handlerPath := getHandlerFolderPath(group, route)
|
||||||
pkgName := handlerPath[strings.LastIndex(handlerPath, "/")+1:]
|
pkgName := handlerPath[strings.LastIndex(handlerPath, "/")+1:]
|
||||||
@@ -50,14 +50,15 @@ func genHandlerTest(dir, rootPkg string, cfg *config.Config, group spec.Group, r
|
|||||||
"HasRequest": len(route.RequestTypeName()) > 0,
|
"HasRequest": len(route.RequestTypeName()) > 0,
|
||||||
"HasDoc": len(route.JoinedDoc()) > 0,
|
"HasDoc": len(route.JoinedDoc()) > 0,
|
||||||
"Doc": getDoc(route.JoinedDoc()),
|
"Doc": getDoc(route.JoinedDoc()),
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func genHandlersTest(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genHandlersTest(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
for _, group := range api.Service.Groups {
|
for _, group := range api.Service.Groups {
|
||||||
for _, route := range group.Routes {
|
for _, route := range group.Routes {
|
||||||
if err := genHandlerTest(dir, rootPkg, cfg, group, route); err != nil {
|
if err := genHandlerTest(dir, rootPkg, projectPkg, cfg, group, route); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ var (
|
|||||||
sseLogicTemplate string
|
sseLogicTemplate string
|
||||||
)
|
)
|
||||||
|
|
||||||
func genLogic(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genLogic(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
for _, g := range api.Service.Groups {
|
for _, g := range api.Service.Groups {
|
||||||
for _, r := range g.Routes {
|
for _, r := range g.Routes {
|
||||||
err := genLogicByRoute(dir, rootPkg, cfg, g, r)
|
err := genLogicByRoute(dir, rootPkg, projectPkg, cfg, g, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ func genLogic(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func genLogicByRoute(dir, rootPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
func genLogicByRoute(dir, rootPkg, projectPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
||||||
logic := getLogicName(route)
|
logic := getLogicName(route)
|
||||||
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
|
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -91,6 +91,7 @@ func genLogicByRoute(dir, rootPkg string, cfg *config.Config, group spec.Group,
|
|||||||
"request": requestString,
|
"request": requestString,
|
||||||
"hasDoc": len(route.JoinedDoc()) > 0,
|
"hasDoc": len(route.JoinedDoc()) > 0,
|
||||||
"doc": getDoc(route.JoinedDoc()),
|
"doc": getDoc(route.JoinedDoc()),
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import (
|
|||||||
//go:embed logic_test.tpl
|
//go:embed logic_test.tpl
|
||||||
var logicTestTemplate string
|
var logicTestTemplate string
|
||||||
|
|
||||||
func genLogicTest(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genLogicTest(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
for _, g := range api.Service.Groups {
|
for _, g := range api.Service.Groups {
|
||||||
for _, r := range g.Routes {
|
for _, r := range g.Routes {
|
||||||
err := genLogicTestByRoute(dir, rootPkg, cfg, g, r)
|
err := genLogicTestByRoute(dir, rootPkg, projectPkg, cfg, g, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ func genLogicTest(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) er
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func genLogicTestByRoute(dir, rootPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
func genLogicTestByRoute(dir, rootPkg, projectPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
||||||
logic := getLogicName(route)
|
logic := getLogicName(route)
|
||||||
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
|
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -73,6 +73,7 @@ func genLogicTestByRoute(dir, rootPkg string, cfg *config.Config, group spec.Gro
|
|||||||
"requestType": requestType,
|
"requestType": requestType,
|
||||||
"hasDoc": len(route.JoinedDoc()) > 0,
|
"hasDoc": len(route.JoinedDoc()) > 0,
|
||||||
"doc": getDoc(route.JoinedDoc()),
|
"doc": getDoc(route.JoinedDoc()),
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
//go:embed main.tpl
|
//go:embed main.tpl
|
||||||
var mainTemplate string
|
var mainTemplate string
|
||||||
|
|
||||||
func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genMain(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
name := strings.ToLower(api.Service.Name)
|
name := strings.ToLower(api.Service.Name)
|
||||||
filename, err := format.FileNamingFormat(cfg.NamingFormat, name)
|
filename, err := format.FileNamingFormat(cfg.NamingFormat, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -38,6 +38,7 @@ func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
|||||||
data: map[string]string{
|
data: map[string]string{
|
||||||
"importPackages": genMainImports(rootPkg),
|
"importPackages": genMainImports(rootPkg),
|
||||||
"serviceName": configName,
|
"serviceName": configName,
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func genRoutes(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genRoutes(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
var builder strings.Builder
|
var builder strings.Builder
|
||||||
groups, err := getRoutes(api)
|
groups, err := getRoutes(api)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -211,6 +211,7 @@ rest.WithPrefix("%s"),`, g.prefix)
|
|||||||
"importPackages": genRouteImports(rootPkg, api),
|
"importPackages": genRouteImports(rootPkg, api),
|
||||||
"routesAdditions": strings.TrimSpace(builder.String()),
|
"routesAdditions": strings.TrimSpace(builder.String()),
|
||||||
"version": version.BuildVersion,
|
"version": version.BuildVersion,
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const contextFilename = "service_context"
|
|||||||
//go:embed svc.tpl
|
//go:embed svc.tpl
|
||||||
var contextTemplate string
|
var contextTemplate string
|
||||||
|
|
||||||
func genServiceContext(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
func genServiceContext(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
||||||
filename, err := format.FileNamingFormat(cfg.NamingFormat, contextFilename)
|
filename, err := format.FileNamingFormat(cfg.NamingFormat, contextFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -53,6 +53,7 @@ func genServiceContext(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpe
|
|||||||
"config": "config.Config",
|
"config": "config.Config",
|
||||||
"middleware": middlewareStr,
|
"middleware": middlewareStr,
|
||||||
"middlewareAssignment": middlewareAssignment,
|
"middlewareAssignment": middlewareAssignment,
|
||||||
|
"projectPkg": projectPkg,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ import (
|
|||||||
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetParentPackage(dir string) (string, error) {
|
func GetParentPackage(dir string) (string, string, error) {
|
||||||
abs, err := filepath.Abs(dir)
|
abs, err := filepath.Abs(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
projectCtx, err := ctx.Prepare(abs)
|
projectCtx, err := ctx.Prepare(abs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix https://github.com/zeromicro/go-zero/issues/1058
|
// fix https://github.com/zeromicro/go-zero/issues/1058
|
||||||
@@ -24,7 +24,7 @@ func GetParentPackage(dir string) (string, error) {
|
|||||||
d := projectCtx.Dir
|
d := projectCtx.Dir
|
||||||
same, err := pathx.SameFile(wd, d)
|
same, err := pathx.SameFile(wd, d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
trim := strings.TrimPrefix(projectCtx.WorkDir, projectCtx.Dir)
|
trim := strings.TrimPrefix(projectCtx.WorkDir, projectCtx.Dir)
|
||||||
@@ -32,5 +32,5 @@ func GetParentPackage(dir string) (string, error) {
|
|||||||
trim = strings.TrimPrefix(strings.ToLower(projectCtx.WorkDir), strings.ToLower(projectCtx.Dir))
|
trim = strings.TrimPrefix(strings.ToLower(projectCtx.WorkDir), strings.ToLower(projectCtx.Dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
return filepath.ToSlash(filepath.Join(projectCtx.Path, trim)), nil
|
return filepath.ToSlash(filepath.Join(projectCtx.Path, trim)), projectCtx.Path, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,17 +65,17 @@ func (m mono) createAPIProject() {
|
|||||||
configPath := filepath.Join(apiWorkDir, "internal", "config")
|
configPath := filepath.Join(apiWorkDir, "internal", "config")
|
||||||
svcPath := filepath.Join(apiWorkDir, "internal", "svc")
|
svcPath := filepath.Join(apiWorkDir, "internal", "svc")
|
||||||
typesPath := filepath.Join(apiWorkDir, "internal", "types")
|
typesPath := filepath.Join(apiWorkDir, "internal", "types")
|
||||||
svcPkg, err := golang.GetParentPackage(svcPath)
|
svcPkg, _, err := golang.GetParentPackage(svcPath)
|
||||||
logx.Must(err)
|
logx.Must(err)
|
||||||
typesPkg, err := golang.GetParentPackage(typesPath)
|
typesPkg, _, err := golang.GetParentPackage(typesPath)
|
||||||
logx.Must(err)
|
logx.Must(err)
|
||||||
configPkg, err := golang.GetParentPackage(configPath)
|
configPkg, _, err := golang.GetParentPackage(configPath)
|
||||||
logx.Must(err)
|
logx.Must(err)
|
||||||
|
|
||||||
var rpcClientPkg string
|
var rpcClientPkg string
|
||||||
if m.callRPC {
|
if m.callRPC {
|
||||||
rpcClientPath := filepath.Join(rpcWorkDir, "greet")
|
rpcClientPath := filepath.Join(rpcWorkDir, "greet")
|
||||||
rpcClientPkg, err = golang.GetParentPackage(rpcClientPath)
|
rpcClientPkg, _, err = golang.GetParentPackage(rpcClientPath)
|
||||||
logx.Must(err)
|
logx.Must(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user