forked from muxi-Infra/muxi-micro
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcurd.go
More file actions
69 lines (62 loc) · 2.01 KB
/
curd.go
File metadata and controls
69 lines (62 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package curd
import (
"os"
"path/filepath"
"github.com/muxi-Infra/muxi-micro/tool/curd/create"
"github.com/muxi-Infra/muxi-micro/tool/curd/parse"
"github.com/spf13/cobra"
)
func InitCurdCobra() *cobra.Command {
// curd 子命令
var curdCmd = &cobra.Command{
Use: "curd",
Short: "curd 自动生成工具",
Long: "在你想要生成 curd 文件的地方创建 model.go,内含可通过 gorm 自动迁移的结构体," +
"gorm 标签中 'primaryKey' 将被视为主键,主键和gorm标签中带有 'unique' 'index' 会自动生成查询",
RunE: func(cmd *cobra.Command, args []string) error {
pkg, _ := cmd.Flags().GetString("package")
dir, _ := cmd.Flags().GetString("dir")
cache, _ := cmd.Flags().GetBool("cache")
cover, _ := cmd.Flags().GetBool("cover")
transcation, _ := cmd.Flags().GetBool("transcation")
modelPath := filepath.Join(dir, "model.go")
if _, err := os.Stat(modelPath); err != nil {
return err
}
structs, err := parse.ParseStructs(modelPath)
if err != nil {
return err
}
for _, v := range structs {
var index []parse.FieldInfo
for _, vv := range v.Index {
index = append(index, vv)
}
index = append(index, v.Primary[0])
err = create.CreateExample_gen(pkg, dir, v.Name, index, cache)
if err != nil {
return err
}
err = create.CreateExample(pkg, dir, v.Name, cache, cover)
if err != nil {
return err
}
err = create.CreateVar(pkg, v.Name, dir, cache, cover)
if err != nil {
return err
}
err = create.CreateTranscation(pkg, dir, transcation)
if err != nil {
return err
}
}
return nil
},
}
curdCmd.Flags().String("package", "repository", "生成文件的包名")
curdCmd.Flags().String("dir", ".", "model文件以及文件生成目录")
curdCmd.Flags().Bool("cache", false, "是否开启缓存")
curdCmd.Flags().Bool("cover", false, "是否覆盖除 _gen.go 外的另外两个文件")
curdCmd.Flags().Bool("transcation", false, "是否生成事务代码")
return curdCmd
}