From a6bf1b9a8bc48fdf1f14af63d0d6cd4750870b58 Mon Sep 17 00:00:00 2001 From: wubin1989 <328454505@qq.com> Date: Mon, 15 Jan 2024 23:39:32 +0800 Subject: [PATCH] some optimization to cli --- app.yml.example | 30 ++++++++++++ cmd/internal/openapi/v3/codegen/server.go | 2 +- cmd/internal/svc/codegen/config.go | 51 ++++++++++++-------- cmd/internal/svc/codegen/config_test.go | 7 ++- cmd/internal/svc/codegen/database/common.go | 27 ++++++----- cmd/internal/svc/codegen/http.go | 2 +- cmd/internal/svc/codegen/init.go | 2 +- cmd/internal/svc/codegen/main.go | 13 +++++ cmd/internal/svc/svc.go | 4 +- cmd/internal/templates/mainmain.go | 2 +- cmd/internal/templates/mainmodule.go | 3 +- toolkit/gormgen/config.go | 2 + toolkit/gormgen/generator.go | 8 ++- toolkit/gormgen/internal/template/model.go | 14 +++++- toolkit/gormgen/internal/template/svc.go | 2 +- toolkit/gormgen/internal/template/svcimpl.go | 4 -- version/version.go | 2 +- 17 files changed, 126 insertions(+), 49 deletions(-) create mode 100644 app.yml.example diff --git a/app.yml.example b/app.yml.example new file mode 100644 index 00000000..6232c4de --- /dev/null +++ b/app.yml.example @@ -0,0 +1,30 @@ +example: + db: + driver: mysql + dsn: root:1234@tcp(127.0.0.1:3306)/tutorial?charset=utf8mb4&parseTime=True&loc=Local + log: + level: info + slow-threshold: 200ms + ignore-record-not-found-error: false + parameterized-queries: false + mysql: + skip-initialize-with-version: false + default-string-size: 0 + disable-with-returning: false + disable-datetime-precision: false + dont-support-rename-index: false + dont-support-rename-column: false + dont-support-for-share-clause: false + dont-support-null-as-default-value: false + dont-support-rename-column-unique: false + postgres: + prefer-simple-protocol: false + without-returning: false + pool: + max-idle-conns: 2 + max-open-conns: -1 + conn-max-lifetime: "" + conn-max-idle-time: "" + biz: + api: + secret: "my_secret" diff --git a/cmd/internal/openapi/v3/codegen/server.go b/cmd/internal/openapi/v3/codegen/server.go index f76e1106..73208467 100644 --- a/cmd/internal/openapi/v3/codegen/server.go +++ b/cmd/internal/openapi/v3/codegen/server.go @@ -185,7 +185,7 @@ import ( v3 "github.com/unionj-cloud/go-doudou/v2/toolkit/openapi/v3" ) -//go:generate go-doudou svc http -c +//go:generate go-doudou svc http //go:generate go-doudou svc grpc {{ range $i, $c := .Meta.Comments }} diff --git a/cmd/internal/svc/codegen/config.go b/cmd/internal/svc/codegen/config.go index 99ef87cd..5eafcf60 100644 --- a/cmd/internal/svc/codegen/config.go +++ b/cmd/internal/svc/codegen/config.go @@ -3,9 +3,11 @@ package codegen import ( "github.com/sirupsen/logrus" "github.com/unionj-cloud/go-doudou/v2/cmd/internal/templates" + "github.com/unionj-cloud/go-doudou/v2/toolkit/astutils" "github.com/unionj-cloud/go-doudou/v2/version" "os" "path/filepath" + "strings" "text/template" ) @@ -13,43 +15,48 @@ var configTmpl = templates.EditableHeaderTmpl + `package config import ( "github.com/kelseyhightower/envconfig" + "github.com/unionj-cloud/go-doudou/v2/framework/config" "github.com/unionj-cloud/go-doudou/v2/toolkit/errorx" ) -type Config struct { - BizConf BizConf -} +var G_Config *Config -type BizConf struct { - ApiSecret string ` + "`" + `split_words:"true"` + "`" + ` +type Config struct { + Biz struct { + ApiSecret string ` + "`" + `split_words:"true"` + "`" + ` + } + config.Config } -func LoadFromEnv() *Config { - var bizConf BizConf - err := envconfig.Process("biz", &bizConf) +func init() { + var conf Config + err := envconfig.Process("{{.ServiceName}}", &conf) if err != nil { errorx.Panic("Error processing environment variables") } - return &Config{ - BizConf: bizConf, - } + G_Config = &conf +} + +func LoadFromEnv() *Config { + return G_Config } ` -//GenConfig generates config file -func GenConfig(dir string) { +// GenConfig generates config file +func GenConfig(dir string, ic astutils.InterfaceCollector) { var ( - err error - configfile string - f *os.File - tpl *template.Template - configDir string + err error + configfile string + f *os.File + tpl *template.Template + configDir string + serviceName string ) configDir = filepath.Join(dir, "config") if err = os.MkdirAll(configDir, os.ModePerm); err != nil { panic(err) } - + serviceName = strings.ToLower(ic.Interfaces[0].Name) configfile = filepath.Join(configDir, "config.go") if _, err = os.Stat(configfile); os.IsNotExist(err) { if f, err = os.Create(configfile); err != nil { @@ -58,9 +65,11 @@ func GenConfig(dir string) { defer f.Close() tpl, _ = template.New("config.go.tmpl").Parse(configTmpl) _ = tpl.Execute(f, struct { - Version string + Version string + ServiceName string }{ - Version: version.Release, + Version: version.Release, + ServiceName: serviceName, }) } else { logrus.Warnf("file %s already exists", configfile) diff --git a/cmd/internal/svc/codegen/config_test.go b/cmd/internal/svc/codegen/config_test.go index 2d8b8152..a330ed59 100644 --- a/cmd/internal/svc/codegen/config_test.go +++ b/cmd/internal/svc/codegen/config_test.go @@ -1,6 +1,7 @@ package codegen import ( + "github.com/unionj-cloud/go-doudou/v2/toolkit/astutils" "os" "path/filepath" "testing" @@ -12,9 +13,11 @@ func TestGenConfig(t *testing.T) { dir := testDir + "config" InitSvc(dir) defer os.RemoveAll(dir) - GenConfig(dir) + var ic astutils.InterfaceCollector + GenConfig(dir, ic) } func TestGenConfig1(t *testing.T) { - GenConfig(filepath.Join(testDir)) + var ic astutils.InterfaceCollector + GenConfig(filepath.Join(testDir), ic) } diff --git a/cmd/internal/svc/codegen/database/common.go b/cmd/internal/svc/codegen/database/common.go index 57d41e5e..d8a28030 100644 --- a/cmd/internal/svc/codegen/database/common.go +++ b/cmd/internal/svc/codegen/database/common.go @@ -71,6 +71,7 @@ type AbstractBaseGenerator struct { Env string impl IOrmGenerator runner executils.Runner + ConfigPackage string } func (b *AbstractBaseGenerator) fix() { @@ -103,6 +104,14 @@ func (b *AbstractBaseGenerator) Initialize(conf OrmGeneratorConfig) { } func (b *AbstractBaseGenerator) GenService() { + b.dto() + b.svcGo() + + validate.DataType(b.Dir) + ic := astutils.BuildInterfaceCollector(filepath.Join(b.Dir, "svc.go"), astutils.ExprString) + validate.RestApi(b.Dir, ic) + + serviceName := ic.Interfaces[0].Name envfile := filepath.Join(b.Dir, ".env") if _, err := os.Stat(envfile); err != nil { fileutils.CreateIfNotExists(envfile, false) @@ -112,24 +121,20 @@ func (b *AbstractBaseGenerator) GenService() { panic(err) } envContent := string(envSource) - if !strings.Contains(envContent, "GDD_DB_DRIVER") { - envContent += fmt.Sprintf(`GDD_DB_DRIVER=%s`, b.Driver) + if !strings.Contains(envContent, strings.ToUpper(serviceName)+"_DB_DRIVER") { + envContent += fmt.Sprintf(`%s_DB_DRIVER=%s`, strings.ToUpper(serviceName), b.Driver) envContent += constants.LineBreak } - if !strings.Contains(envContent, "GDD_DB_DSN") { - envContent += fmt.Sprintf(`GDD_DB_DSN=%s`, b.Dsn) + if !strings.Contains(envContent, strings.ToUpper(serviceName)+"_DB_DSN") { + envContent += fmt.Sprintf(`%s_DB_DSN=%s`, strings.ToUpper(serviceName), b.Dsn) envContent += constants.LineBreak } ioutil.WriteFile(envfile, []byte(envContent), os.ModePerm) - b.dto() - b.svcGo() - - validate.DataType(b.Dir) - ic := astutils.BuildInterfaceCollector(filepath.Join(b.Dir, "svc.go"), astutils.ExprString) - validate.RestApi(b.Dir, ic) + codegen.GenConfig(b.Dir, ic) - codegen.GenConfig(b.Dir) + cfgPkg := astutils.GetPkgPath(filepath.Join(b.Dir, "config")) + b.g.ConfigPackage = cfgPkg b.orm() b.svcImplGo() diff --git a/cmd/internal/svc/codegen/http.go b/cmd/internal/svc/codegen/http.go index 345a0283..9e11819f 100644 --- a/cmd/internal/svc/codegen/http.go +++ b/cmd/internal/svc/codegen/http.go @@ -6,7 +6,7 @@ import ( ) func genHttp(dir string, ic astutils.InterfaceCollector, caseConvertor func(string) string) { - GenConfig(dir) + GenConfig(dir, ic) GenHttpMiddleware(dir) GenHttpHandler(dir, ic, 0) GenHttpHandlerImpl(dir, ic, GenHttpHandlerImplConfig{ diff --git a/cmd/internal/svc/codegen/init.go b/cmd/internal/svc/codegen/init.go index c9b8cb0f..b8c6d78a 100644 --- a/cmd/internal/svc/codegen/init.go +++ b/cmd/internal/svc/codegen/init.go @@ -26,7 +26,7 @@ import ( "{{.DtoPackage}}" ) -//go:generate go-doudou svc http -c +//go:generate go-doudou svc http //go:generate go-doudou svc grpc type {{.SvcName}} interface { diff --git a/cmd/internal/svc/codegen/main.go b/cmd/internal/svc/codegen/main.go index a383fc2e..e009830c 100644 --- a/cmd/internal/svc/codegen/main.go +++ b/cmd/internal/svc/codegen/main.go @@ -15,12 +15,19 @@ var mainTmpl = templates.EditableHeaderTmpl + `package main import ( "github.com/unionj-cloud/go-doudou/v2/framework/rest" {{.ServiceAlias}} "{{.ServicePackage}}" + {{- if .QueryPackage}} + "{{.QueryPackage}}" + "github.com/unionj-cloud/go-doudou/v2/framework/database" + {{- end}} "{{.ConfigPackage}}" "{{.HttpPackage}}" ) func main() { conf := config.LoadFromEnv() +{{- if .QueryPackage}} + query.SetDefault(database.NewDb(conf.Config)) +{{- end}} svc := {{.ServiceAlias}}.New{{.SvcName}}(conf) handler := httpsrv.New{{.SvcName}}Handler(svc) srv := rest.NewRestServer() @@ -52,6 +59,10 @@ func GenMain(dir string, ic astutils.InterfaceCollector) { servicePkg := astutils.GetPkgPath(dir) cfgPkg := astutils.GetPkgPath(filepath.Join(dir, "config")) httpsrvPkg := astutils.GetPkgPath(filepath.Join(dir, "transport", "httpsrv")) + var queryPkg string + if _, err := Stat(filepath.Join(dir, "query")); err == nil { + queryPkg = astutils.GetPkgPath(filepath.Join(dir, "query")) + } if f, err = Create(mainfile); err != nil { panic(err) @@ -68,6 +79,7 @@ func GenMain(dir string, ic astutils.InterfaceCollector) { SvcName string ServiceAlias string Version string + QueryPackage string }{ ServicePackage: servicePkg, ConfigPackage: cfgPkg, @@ -75,6 +87,7 @@ func GenMain(dir string, ic astutils.InterfaceCollector) { SvcName: svcName, ServiceAlias: alias, Version: version.Release, + QueryPackage: queryPkg, }); err != nil { panic(err) } diff --git a/cmd/internal/svc/svc.go b/cmd/internal/svc/svc.go index 7d0070e1..3b9cfd85 100644 --- a/cmd/internal/svc/svc.go +++ b/cmd/internal/svc/svc.go @@ -134,7 +134,7 @@ func (receiver *Svc) Http() { ic := astutils.BuildInterfaceCollector(filepath.Join(dir, "svc.go"), astutils.ExprString) validate.RestApi(dir, ic) - codegen.GenConfig(dir) + codegen.GenConfig(dir, ic) codegen.GenHttpMiddleware(dir) codegen.GenMain(dir, ic) @@ -514,7 +514,7 @@ func (receiver *Svc) Grpc() { validate.DataType(dir) ic := astutils.BuildInterfaceCollector(filepath.Join(dir, "svc.go"), astutils.ExprString) validate.GrpcApi(dir, ic, receiver.http2grpc) - codegen.GenConfig(dir) + codegen.GenConfig(dir, ic) parser.ParseDtoGrpc(dir, receiver.protoGenerator, "dto") grpcSvc, protoFile := codegen.GenGrpcProto(dir, ic, receiver.protoGenerator) // protoc --proto_path=. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative transport/grpc/helloworld.proto diff --git a/cmd/internal/templates/mainmain.go b/cmd/internal/templates/mainmain.go index 64c79a33..95f9a020 100644 --- a/cmd/internal/templates/mainmain.go +++ b/cmd/internal/templates/mainmain.go @@ -45,7 +45,7 @@ func main() { } defer func() { if r := recover(); r != nil { - zlogger.Info().Msgf("Recovered. Error:\n", r) + zlogger.Info().Msgf("Recovered. Error: %v\n", r) } for _, v := range plugin.GetServicePlugins() { v.Close() diff --git a/cmd/internal/templates/mainmodule.go b/cmd/internal/templates/mainmodule.go index d22907c5..4f72ed15 100644 --- a/cmd/internal/templates/mainmodule.go +++ b/cmd/internal/templates/mainmodule.go @@ -6,6 +6,7 @@ import ( "github.com/unionj-cloud/go-doudou/v2/framework/grpcx" "github.com/unionj-cloud/go-doudou/v2/framework/plugin" "github.com/unionj-cloud/go-doudou/v2/framework/rest" + "github.com/unionj-cloud/go-doudou/v2/toolkit/zlogger" _ "{{.PluginPackage}}" ) @@ -17,7 +18,7 @@ func main() { } defer func() { if r := recover(); r != nil { - zlogger.Info().Msgf("Recovered. Error:\n", r) + zlogger.Info().Msgf("Recovered. Error: %v\n", r) } for _, v := range plugin.GetServicePlugins() { v.Close() diff --git a/toolkit/gormgen/config.go b/toolkit/gormgen/config.go index c6733644..e6cf286b 100644 --- a/toolkit/gormgen/config.go +++ b/toolkit/gormgen/config.go @@ -61,6 +61,8 @@ type Config struct { fieldJSONTagNS func(columnName string) (tagContent string) modelOpts []ModelOpt + + ConfigPackage string } // WithOpts set global model options diff --git a/toolkit/gormgen/generator.go b/toolkit/gormgen/generator.go index 304a7fc4..a04ff966 100644 --- a/toolkit/gormgen/generator.go +++ b/toolkit/gormgen/generator.go @@ -786,7 +786,13 @@ func (g *Generator) generateModelFile() error { errChan <- err return } - err = t.Execute(&buf, data) + err = t.Execute(&buf, struct { + *generate.QueryStructMeta + ConfigPackage string + }{ + QueryStructMeta: data, + ConfigPackage: g.ConfigPackage, + }) if err != nil { errChan <- err return diff --git a/toolkit/gormgen/internal/template/model.go b/toolkit/gormgen/internal/template/model.go index ce446a14..b2f8e7ec 100644 --- a/toolkit/gormgen/internal/template/model.go +++ b/toolkit/gormgen/internal/template/model.go @@ -5,6 +5,10 @@ const Model = NotEditMark + ` package {{.StructInfo.Package}} import ( + "{{.ConfigPackage}}" + "fmt" + "github.com/unionj-cloud/go-doudou/v2/toolkit/stringutils" + "encoding/json" "time" @@ -14,7 +18,15 @@ import ( {{range .ImportPkgPaths}}{{.}} ` + "\n" + `{{end}} ) -{{if .TableName -}}const TableName{{.ModelStructName}} = "{{.TableName}}"{{- end}} +{{if .TableName -}}var TableName{{.ModelStructName}} string{{- end}} + +func init() { + if stringutils.IsNotEmpty(config.G_Config.Db.Name) { + TableName{{.ModelStructName}} = fmt.Sprintf("%s.{{.TableName}}", config.G_Config.Db.Name) + } else { + TableName{{.ModelStructName}} = "{{.TableName}}" + } +} // {{.ModelStructName}} {{.StructComment}} type {{.ModelStructName}} struct { diff --git a/toolkit/gormgen/internal/template/svc.go b/toolkit/gormgen/internal/template/svc.go index 524b8b25..6d2fca35 100644 --- a/toolkit/gormgen/internal/template/svc.go +++ b/toolkit/gormgen/internal/template/svc.go @@ -9,7 +9,7 @@ import ( v3 "github.com/unionj-cloud/go-doudou/v2/toolkit/openapi/v3" ) -//go:generate go-doudou svc http -c +//go:generate go-doudou svc http //go:generate go-doudou svc grpc type {{.InterfaceName}} interface { diff --git a/toolkit/gormgen/internal/template/svcimpl.go b/toolkit/gormgen/internal/template/svcimpl.go index 8bde6fce..220b98ff 100644 --- a/toolkit/gormgen/internal/template/svcimpl.go +++ b/toolkit/gormgen/internal/template/svcimpl.go @@ -5,10 +5,6 @@ package service import () -func init() { - query.SetDefault(database.Db) -} - var _ {{.InterfaceName}} = (*{{.InterfaceName}}Impl)(nil) type {{.InterfaceName}}Impl struct { diff --git a/version/version.go b/version/version.go index a22ee274..748b760a 100644 --- a/version/version.go +++ b/version/version.go @@ -1,3 +1,3 @@ package version -const Release = "v2.2.8" +const Release = "v2.2.9"