123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package generate
- import (
- "errors"
- "path/filepath"
- "github.com/zeromicro/go-zero/tools/goctl/config"
- "github.com/zeromicro/go-zero/tools/goctl/model/mongo/template"
- "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
- type Context struct {
- Types []string
- Cache bool
- Easy 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")
- }
- if err := generateTypes(ctx); err != nil {
- return err
- }
- if err := generateModel(ctx); err != nil {
- return err
- }
- if err := generateCustomModel(ctx); 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_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, 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": stringx.From(t).Title(),
- "lowerType": stringx.From(t).Untitle(),
- "snakeType": stringx.From(t).ToSnake(),
- "Cache": ctx.Cache,
- "Easy": ctx.Easy,
- }, output, false)
- if err != nil {
- return err
- }
- }
- 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 {
- return err
- }
- output := filepath.Join(ctx.Output, "error.go")
- return util.With("error").Parse(text).GoFmt(true).SaveTo(ctx, output, false)
- }
|