diff --git a/tools/goctl/api/gogen/gen.go b/tools/goctl/api/gogen/gen.go index 9c1bb7b18..b8e4a2bbc 100644 --- a/tools/goctl/api/gogen/gen.go +++ b/tools/goctl/api/gogen/gen.go @@ -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 { diff --git a/tools/goctl/api/gogen/genconfig.go b/tools/goctl/api/gogen/genconfig.go index 67740f7cb..423b3283f 100644 --- a/tools/goctl/api/gogen/genconfig.go +++ b/tools/goctl/api/gogen/genconfig.go @@ -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, }, }) } diff --git a/tools/goctl/api/gogen/genhandlers.go b/tools/goctl/api/gogen/genhandlers.go index 0aa335aa6..52d5d9eaf 100644 --- a/tools/goctl/api/gogen/genhandlers.go +++ b/tools/goctl/api/gogen/genhandlers.go @@ -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 } } diff --git a/tools/goctl/api/gogen/genhandlerstest.go b/tools/goctl/api/gogen/genhandlerstest.go index ea913144c..e066af385 100644 --- a/tools/goctl/api/gogen/genhandlerstest.go +++ b/tools/goctl/api/gogen/genhandlerstest.go @@ -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 } } diff --git a/tools/goctl/api/gogen/genlogic.go b/tools/goctl/api/gogen/genlogic.go index fcf39ff8a..de08742a4 100644 --- a/tools/goctl/api/gogen/genlogic.go +++ b/tools/goctl/api/gogen/genlogic.go @@ -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, }, }) } diff --git a/tools/goctl/api/gogen/genlogictest.go b/tools/goctl/api/gogen/genlogictest.go index 14f4ac21b..c831561e3 100644 --- a/tools/goctl/api/gogen/genlogictest.go +++ b/tools/goctl/api/gogen/genlogictest.go @@ -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, }, }) } diff --git a/tools/goctl/api/gogen/genmain.go b/tools/goctl/api/gogen/genmain.go index 154a7dccf..b6828ceed 100644 --- a/tools/goctl/api/gogen/genmain.go +++ b/tools/goctl/api/gogen/genmain.go @@ -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, }, }) } diff --git a/tools/goctl/api/gogen/genroutes.go b/tools/goctl/api/gogen/genroutes.go index e29d6e7e3..89882604b 100644 --- a/tools/goctl/api/gogen/genroutes.go +++ b/tools/goctl/api/gogen/genroutes.go @@ -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, }, }) } diff --git a/tools/goctl/api/gogen/gensvc.go b/tools/goctl/api/gogen/gensvc.go index 1f500a001..cbe9a96c6 100644 --- a/tools/goctl/api/gogen/gensvc.go +++ b/tools/goctl/api/gogen/gensvc.go @@ -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, }, }) } diff --git a/tools/goctl/pkg/golang/path.go b/tools/goctl/pkg/golang/path.go index 1f0a2bb1d..dbdd733d6 100644 --- a/tools/goctl/pkg/golang/path.go +++ b/tools/goctl/pkg/golang/path.go @@ -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 } diff --git a/tools/goctl/quickstart/mono.go b/tools/goctl/quickstart/mono.go index 5d04bf5df..5f3fbec7c 100644 --- a/tools/goctl/quickstart/mono.go +++ b/tools/goctl/quickstart/mono.go @@ -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) }