Feature mongo gen (#546)
* add feature: mongo code generation * upgrade version * update doc * format code * update update.tpl of mysql
This commit is contained in:
69
tools/goctl/model/mongo/generate/generate.go
Normal file
69
tools/goctl/model/mongo/generate/generate.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/tal-tech/go-zero/tools/goctl/config"
|
||||
"github.com/tal-tech/go-zero/tools/goctl/model/mongo/template"
|
||||
"github.com/tal-tech/go-zero/tools/goctl/util"
|
||||
"github.com/tal-tech/go-zero/tools/goctl/util/format"
|
||||
)
|
||||
|
||||
// Context defines the model generation data what they needs
|
||||
type Context struct {
|
||||
Types []string
|
||||
Cache bool
|
||||
Output string
|
||||
Cfg *config.Config
|
||||
}
|
||||
|
||||
// Do executes model template and output the result into the specified file path
|
||||
func Do(ctx *Context) error {
|
||||
if ctx.Cfg == nil {
|
||||
return errors.New("missing config")
|
||||
}
|
||||
|
||||
err := generateModel(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return generateError(ctx)
|
||||
}
|
||||
|
||||
func generateModel(ctx *Context) error {
|
||||
for _, t := range ctx.Types {
|
||||
fn, err := format.FileNamingFormat(ctx.Cfg.NamingFormat, t+"_model")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
text, err := util.LoadTemplate(category, modelTemplateFile, template.Text)
|
||||
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,
|
||||
}, output, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateError(ctx *Context) error {
|
||||
text, err := util.LoadTemplate(category, errTemplateFile, template.Error)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
output := filepath.Join(ctx.Output, "error.go")
|
||||
|
||||
return util.With("error").Parse(text).GoFmt(true).SaveTo(ctx, output, false)
|
||||
}
|
||||
34
tools/goctl/model/mongo/generate/generate_test.go
Normal file
34
tools/goctl/model/mongo/generate/generate_test.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/tal-tech/go-zero/tools/goctl/config"
|
||||
)
|
||||
|
||||
var testTypes = `
|
||||
type User struct{}
|
||||
type Class struct{}
|
||||
`
|
||||
|
||||
func TestDo(t *testing.T) {
|
||||
cfg, err := config.NewConfig(config.DefaultFormat)
|
||||
assert.Nil(t, err)
|
||||
|
||||
tempDir := t.TempDir()
|
||||
typesfile := filepath.Join(tempDir, "types.go")
|
||||
err = ioutil.WriteFile(typesfile, []byte(testTypes), 0666)
|
||||
assert.Nil(t, err)
|
||||
|
||||
err = Do(&Context{
|
||||
Types: []string{"User", "Class"},
|
||||
Cache: false,
|
||||
Output: tempDir,
|
||||
Cfg: cfg,
|
||||
})
|
||||
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
50
tools/goctl/model/mongo/generate/template.go
Normal file
50
tools/goctl/model/mongo/generate/template.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tal-tech/go-zero/tools/goctl/model/mongo/template"
|
||||
"github.com/tal-tech/go-zero/tools/goctl/util"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
const (
|
||||
category = "mongo"
|
||||
modelTemplateFile = "model.tpl"
|
||||
errTemplateFile = "err.tpl"
|
||||
)
|
||||
|
||||
var templates = map[string]string{
|
||||
modelTemplateFile: template.Text,
|
||||
errTemplateFile: template.Error,
|
||||
}
|
||||
|
||||
func Category() string {
|
||||
return category
|
||||
}
|
||||
|
||||
func Clean() error {
|
||||
return util.Clean(category)
|
||||
}
|
||||
|
||||
func Templates(_ *cli.Context) error {
|
||||
return util.InitTemplates(category, templates)
|
||||
}
|
||||
|
||||
func RevertTemplate(name string) error {
|
||||
content, ok := templates[name]
|
||||
if !ok {
|
||||
return fmt.Errorf("%s: no such file name", name)
|
||||
}
|
||||
|
||||
return util.CreateTemplate(category, name, content)
|
||||
}
|
||||
|
||||
func Update() error {
|
||||
err := Clean()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return util.InitTemplates(category, templates)
|
||||
}
|
||||
Reference in New Issue
Block a user