feat: Support projectPkg template variables in config, handler, logic, main, and svc template files (#4939)

This commit is contained in:
geekeryy
2025-08-19 20:29:41 +08:00
committed by GitHub
parent 20d20ef861
commit 73d6fcfccd
11 changed files with 42 additions and 34 deletions

View File

@@ -90,23 +90,23 @@ func DoGenProject(apiFile, dir, style string, withTest bool) error {
}
logx.Must(pathx.MkdirIfNotExist(dir))
rootPkg, err := golang.GetParentPackage(dir)
rootPkg, projectPkg, err := golang.GetParentPackage(dir)
if err != nil {
return err
}
logx.Must(genEtc(dir, cfg, api))
logx.Must(genConfig(dir, cfg, api))
logx.Must(genMain(dir, rootPkg, cfg, api))
logx.Must(genServiceContext(dir, rootPkg, cfg, api))
logx.Must(genConfig(dir, projectPkg, cfg, api))
logx.Must(genMain(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genServiceContext(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genTypes(dir, cfg, api))
logx.Must(genRoutes(dir, rootPkg, cfg, api))
logx.Must(genHandlers(dir, rootPkg, cfg, api))
logx.Must(genLogic(dir, rootPkg, cfg, api))
logx.Must(genRoutes(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genHandlers(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genLogic(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genMiddleware(dir, cfg, api))
if withTest {
logx.Must(genHandlersTest(dir, rootPkg, cfg, api))
logx.Must(genLogicTest(dir, rootPkg, cfg, api))
logx.Must(genHandlersTest(dir, rootPkg, projectPkg, cfg, api))
logx.Must(genLogicTest(dir, rootPkg, projectPkg, cfg, api))
}
if err := backupAndSweep(apiFile); err != nil {

View File

@@ -29,7 +29,7 @@ const (
//go:embed config.tpl
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)
if err != nil {
return err
@@ -60,6 +60,7 @@ func genConfig(dir string, cfg *config.Config, api *spec.ApiSpec) error {
"authImport": authImportStr,
"auth": strings.Join(auths, "\n"),
"jwtTrans": strings.Join(jwtTransList, "\n"),
"projectPkg": projectPkg,
},
})
}

View File

@@ -22,7 +22,7 @@ var (
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)
handlerPath := getHandlerFolderPath(group, route)
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,
"HasDoc": len(route.JoinedDoc()) > 0,
"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 _, 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
}
}

View File

@@ -15,7 +15,7 @@ import (
//go:embed handler_test.tpl
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)
handlerPath := getHandlerFolderPath(group, route)
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,
"HasDoc": len(route.JoinedDoc()) > 0,
"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 _, 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
}
}

View File

@@ -23,10 +23,10 @@ var (
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 _, r := range g.Routes {
err := genLogicByRoute(dir, rootPkg, cfg, g, r)
err := genLogicByRoute(dir, rootPkg, projectPkg, cfg, g, r)
if err != nil {
return err
}
@@ -35,7 +35,7 @@ func genLogic(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error
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)
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
if err != nil {
@@ -91,6 +91,7 @@ func genLogicByRoute(dir, rootPkg string, cfg *config.Config, group spec.Group,
"request": requestString,
"hasDoc": len(route.JoinedDoc()) > 0,
"doc": getDoc(route.JoinedDoc()),
"projectPkg": projectPkg,
},
})
}

View File

@@ -14,10 +14,10 @@ import (
//go:embed logic_test.tpl
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 _, r := range g.Routes {
err := genLogicTestByRoute(dir, rootPkg, cfg, g, r)
err := genLogicTestByRoute(dir, rootPkg, projectPkg, cfg, g, r)
if err != nil {
return err
}
@@ -26,7 +26,7 @@ func genLogicTest(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) er
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)
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
if err != nil {
@@ -73,6 +73,7 @@ func genLogicTestByRoute(dir, rootPkg string, cfg *config.Config, group spec.Gro
"requestType": requestType,
"hasDoc": len(route.JoinedDoc()) > 0,
"doc": getDoc(route.JoinedDoc()),
"projectPkg": projectPkg,
},
})
}

View File

@@ -15,7 +15,7 @@ import (
//go:embed main.tpl
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)
filename, err := format.FileNamingFormat(cfg.NamingFormat, name)
if err != nil {
@@ -38,6 +38,7 @@ func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
data: map[string]string{
"importPackages": genMainImports(rootPkg),
"serviceName": configName,
"projectPkg": projectPkg,
},
})
}

View File

@@ -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
groups, err := getRoutes(api)
if err != nil {
@@ -211,6 +211,7 @@ rest.WithPrefix("%s"),`, g.prefix)
"importPackages": genRouteImports(rootPkg, api),
"routesAdditions": strings.TrimSpace(builder.String()),
"version": version.BuildVersion,
"projectPkg": projectPkg,
},
})
}

View File

@@ -17,7 +17,7 @@ const contextFilename = "service_context"
//go:embed svc.tpl
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)
if err != nil {
return err
@@ -53,6 +53,7 @@ func genServiceContext(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpe
"config": "config.Config",
"middleware": middlewareStr,
"middlewareAssignment": middlewareAssignment,
"projectPkg": projectPkg,
},
})
}

View File

@@ -8,15 +8,15 @@ import (
"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)
if err != nil {
return "", err
return "", "", err
}
projectCtx, err := ctx.Prepare(abs)
if err != nil {
return "", err
return "", "", err
}
// fix https://github.com/zeromicro/go-zero/issues/1058
@@ -24,7 +24,7 @@ func GetParentPackage(dir string) (string, error) {
d := projectCtx.Dir
same, err := pathx.SameFile(wd, d)
if err != nil {
return "", err
return "", "", err
}
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))
}
return filepath.ToSlash(filepath.Join(projectCtx.Path, trim)), nil
return filepath.ToSlash(filepath.Join(projectCtx.Path, trim)), projectCtx.Path, nil
}

View File

@@ -65,17 +65,17 @@ func (m mono) createAPIProject() {
configPath := filepath.Join(apiWorkDir, "internal", "config")
svcPath := filepath.Join(apiWorkDir, "internal", "svc")
typesPath := filepath.Join(apiWorkDir, "internal", "types")
svcPkg, err := golang.GetParentPackage(svcPath)
svcPkg, _, err := golang.GetParentPackage(svcPath)
logx.Must(err)
typesPkg, err := golang.GetParentPackage(typesPath)
typesPkg, _, err := golang.GetParentPackage(typesPath)
logx.Must(err)
configPkg, err := golang.GetParentPackage(configPath)
configPkg, _, err := golang.GetParentPackage(configPath)
logx.Must(err)
var rpcClientPkg string
if m.callRPC {
rpcClientPath := filepath.Join(rpcWorkDir, "greet")
rpcClientPkg, err = golang.GetParentPackage(rpcClientPath)
rpcClientPkg, _, err = golang.GetParentPackage(rpcClientPath)
logx.Must(err)
}