feat: Replace mongo package with monc & mon (#2002)

* Replace mongo package with monc & mon

* Add terminal whitespace

* format code
This commit is contained in:
anqiansong
2022-06-12 23:02:34 +08:00
committed by GitHub
parent ed1c937998
commit c27e00b45c
16 changed files with 544 additions and 255 deletions

View File

@@ -9,6 +9,7 @@ import (
"github.com/zeromicro/go-zero/tools/goctl/util"
"github.com/zeromicro/go-zero/tools/goctl/util/format"
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
"github.com/zeromicro/go-zero/tools/goctl/util/stringx"
)
// Context defines the model generation data what they needs
@@ -25,8 +26,15 @@ func Do(ctx *Context) error {
return errors.New("missing config")
}
err := generateModel(ctx)
if err != nil {
if err := generateTypes(ctx); err != nil {
return err
}
if err := generateModel(ctx); err != nil {
return err
}
if err := generateCustomModel(ctx); err != nil {
return err
}
@@ -34,21 +42,47 @@ func Do(ctx *Context) error {
}
func generateModel(ctx *Context) error {
for _, t := range ctx.Types {
fn, err := format.FileNamingFormat(ctx.Cfg.NamingFormat, t+"_model_gen")
if err != nil {
return err
}
text, err := pathx.LoadTemplate(category, modelTemplateFile, template.ModelText)
if err != nil {
return err
}
output := filepath.Join(ctx.Output, fn+".go")
if err = util.With("model").Parse(text).GoFmt(true).SaveTo(map[string]interface{}{
"Type": stringx.From(t).Title(),
"lowerType": stringx.From(t).Untitle(),
"Cache": ctx.Cache,
}, output, true); err != nil {
return err
}
}
return nil
}
func generateCustomModel(ctx *Context) error {
for _, t := range ctx.Types {
fn, err := format.FileNamingFormat(ctx.Cfg.NamingFormat, t+"_model")
if err != nil {
return err
}
text, err := pathx.LoadTemplate(category, modelTemplateFile, template.Text)
text, err := pathx.LoadTemplate(category, modelCustomTemplateFile, template.ModelCustomText)
if err != nil {
return err
}
output := filepath.Join(ctx.Output, fn+".go")
err = util.With("model").Parse(text).GoFmt(true).SaveTo(map[string]interface{}{
"Type": t,
"Cache": ctx.Cache,
"Type": stringx.From(t).Title(),
"lowerType": stringx.From(t).Untitle(),
"Cache": ctx.Cache,
}, output, false)
if err != nil {
return err
@@ -58,6 +92,29 @@ func generateModel(ctx *Context) error {
return nil
}
func generateTypes(ctx *Context) error {
for _, t := range ctx.Types {
fn, err := format.FileNamingFormat(ctx.Cfg.NamingFormat, t+"types")
if err != nil {
return err
}
text, err := pathx.LoadTemplate(category, modelTypesTemplateFile, template.ModelTypesText)
if err != nil {
return err
}
output := filepath.Join(ctx.Output, fn+".go")
if err = util.With("model").Parse(text).GoFmt(true).SaveTo(map[string]interface{}{
"Type": stringx.From(t).Title(),
}, output, false);err!=nil{
return err
}
}
return nil
}
func generateError(ctx *Context) error {
text, err := pathx.LoadTemplate(category, errTemplateFile, template.Error)
if err != nil {

View File

@@ -16,20 +16,53 @@ var testTypes = `
`
func TestDo(t *testing.T) {
cfg, err := config.NewConfig(config.DefaultFormat)
assert.Nil(t, err)
t.Run("should generate model", func(t *testing.T) {
cfg, err := config.NewConfig(config.DefaultFormat)
assert.Nil(t, err)
tempDir := pathx.MustTempDir()
typesfile := filepath.Join(tempDir, "types.go")
err = ioutil.WriteFile(typesfile, []byte(testTypes), 0o666)
assert.Nil(t, err)
tempDir := pathx.MustTempDir()
typesfile := filepath.Join(tempDir, "types.go")
err = ioutil.WriteFile(typesfile, []byte(testTypes), 0o666)
assert.Nil(t, err)
err = Do(&Context{
Types: []string{"User", "Class"},
Cache: false,
Output: tempDir,
Cfg: cfg,
err = Do(&Context{
Types: []string{"User", "Class"},
Cache: false,
Output: tempDir,
Cfg: cfg,
})
assert.Nil(t, err)
})
assert.Nil(t, err)
t.Run("missing config", func(t *testing.T) {
tempDir := t.TempDir()
typesfile := filepath.Join(tempDir, "types.go")
err := ioutil.WriteFile(typesfile, []byte(testTypes), 0o666)
assert.Nil(t, err)
err = Do(&Context{
Types: []string{"User", "Class"},
Cache: false,
Output: tempDir,
Cfg: nil,
})
assert.Error(t, err)
})
t.Run("invalid config", func(t *testing.T) {
cfg := &config.Config{NamingFormat: "foo"}
tempDir := t.TempDir()
typesfile := filepath.Join(tempDir, "types.go")
err := ioutil.WriteFile(typesfile, []byte(testTypes), 0o666)
assert.Nil(t, err)
err = Do(&Context{
Types: []string{"User", "Class"},
Cache: false,
Output: tempDir,
Cfg: cfg,
})
assert.Error(t, err)
})
}

View File

@@ -8,14 +8,18 @@ import (
)
const (
category = "mongo"
modelTemplateFile = "model.tpl"
errTemplateFile = "err.tpl"
category = "mongo"
modelTemplateFile = "model.tpl"
modelCustomTemplateFile = "model_custom.tpl"
modelTypesTemplateFile = "model_types.tpl"
errTemplateFile = "err.tpl"
)
var templates = map[string]string{
modelTemplateFile: template.Text,
errTemplateFile: template.Error,
modelTemplateFile: template.ModelText,
modelCustomTemplateFile: template.ModelCustomText,
modelTypesTemplateFile: template.ModelTypesText,
errTemplateFile: template.Error,
}
// Category returns the mongo category.

View File

@@ -0,0 +1,41 @@
package generate
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
)
func TestTemplate(t *testing.T) {
tempDir := t.TempDir()
pathx.RegisterGoctlHome(tempDir)
t.Cleanup(func() {
pathx.RegisterGoctlHome("")
})
t.Run("Category", func(t *testing.T) {
assert.Equal(t, category, Category())
})
t.Run("Clean", func(t *testing.T) {
err := Clean()
assert.NoError(t, err)
})
t.Run("Templates", func(t *testing.T) {
err := Templates()
assert.NoError(t, err)
assert.True(t, pathx.FileExists(filepath.Join(tempDir, category, modelTemplateFile)))
})
t.Run("RevertTemplate", func(t *testing.T) {
assert.NoError(t, RevertTemplate(modelTemplateFile))
assert.Error(t, RevertTemplate("foo"))
})
t.Run("Update", func(t *testing.T) {
assert.NoError(t, Update())
})
}