github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/command/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "io" 6 "os" 7 "os/signal" 8 "strings" 9 "syscall" 10 11 "github.com/easysoft/zendata/cmd/command/action" 12 "github.com/easysoft/zendata/internal/command" 13 commandConfig "github.com/easysoft/zendata/internal/command/config" 14 configUtils "github.com/easysoft/zendata/internal/pkg/config" 15 consts "github.com/easysoft/zendata/internal/pkg/const" 16 "github.com/easysoft/zendata/internal/pkg/helper" 17 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 18 logUtils "github.com/easysoft/zendata/pkg/utils/log" 19 "github.com/easysoft/zendata/pkg/utils/vari" 20 "github.com/fatih/color" 21 ) 22 23 var ( 24 defaultFile string 25 configFile string 26 exportFields string 27 28 root string 29 input string 30 31 parse bool 32 listData bool 33 listRes bool 34 view string 35 md5 string 36 salt string 37 mock bool 38 39 example bool 40 help bool 41 version bool 42 set bool 43 44 AppVersion string 45 BuildTime string 46 GoVersion string 47 GitHash string 48 49 flagSet *flag.FlagSet 50 ) 51 52 func main() { 53 channel := make(chan os.Signal, 1) // fix for sigchanyzer: misuse of unbuffered os.Signal channel as argument to signal.Notify 54 signal.Notify(channel, os.Interrupt, syscall.SIGTERM) 55 go func() { 56 <-channel 57 cleanup() 58 os.Exit(0) 59 }() 60 61 flagSet = flag.NewFlagSet("zd", flag.ContinueOnError) 62 63 flagSet.StringVar(&defaultFile, "d", "", "") 64 flagSet.StringVar(&defaultFile, "default", "", "") 65 66 flagSet.StringVar(&configFile, "c", "", "") 67 flagSet.StringVar(&configFile, "config", "", "") 68 69 flagSet.IntVar(&vari.GlobalVars.Total, "n", -1, "") 70 flagSet.IntVar(&vari.GlobalVars.Total, "lines", -1, "") 71 72 flagSet.StringVar(&exportFields, "F", "", "") 73 flagSet.StringVar(&exportFields, "field", "", "") 74 75 flagSet.StringVar(&vari.GlobalVars.OutputFormat, "f", consts.FormatText, "") 76 flagSet.StringVar(&vari.GlobalVars.OutputFormat, "format", consts.FormatText, "") 77 78 flagSet.StringVar(&vari.GlobalVars.Output, "o", "", "") 79 flagSet.StringVar(&vari.GlobalVars.Output, "output", "", "") 80 81 flagSet.BoolVar(&listData, "l", false, "") 82 flagSet.BoolVar(&listData, "list", false, "") 83 flagSet.BoolVar(&listRes, "L", false, "") 84 85 flagSet.StringVar(&view, "v", "", "") 86 flagSet.StringVar(&view, "view", "", "") 87 88 flagSet.StringVar(&md5, "md5", "", "") 89 flagSet.StringVar(&salt, "salt", "", "") 90 91 flagSet.BoolVar(&mock, "m", false, "") 92 93 flagSet.StringVar(&root, "R", "", "") 94 flagSet.StringVar(&root, "root", "", "") 95 96 flagSet.BoolVar(&vari.GlobalVars.Human, "H", false, "") 97 flagSet.BoolVar(&vari.GlobalVars.Human, "human", false, "") 98 99 flagSet.BoolVar(&vari.GlobalVars.Trim, "T", false, "") 100 flagSet.BoolVar(&vari.GlobalVars.Trim, "trim", false, "") 101 102 flagSet.BoolVar(&vari.GlobalVars.Recursive, "r", false, "") 103 flagSet.BoolVar(&vari.GlobalVars.Recursive, "recursive", false, "") 104 105 //flagSet.StringVar(&vari.CacheParam, "C", "", "") 106 //flagSet.StringVar(&vari.CacheParam, "cache", "", "") 107 108 flagSet.BoolVar(&example, "e", false, "") 109 flagSet.BoolVar(&example, "example", false, "") 110 111 flagSet.BoolVar(&set, "S", false, "") 112 flagSet.BoolVar(&set, "set", false, "") 113 114 // gen yaml from sql or table 115 flagSet.BoolVar(&parse, "parse", false, "") 116 117 flagSet.StringVar(&input, "i", "", "") 118 flagSet.StringVar(&input, "input", "", "") 119 120 flagSet.StringVar(&vari.GlobalVars.Table, "t", "", "") 121 flagSet.StringVar(&vari.GlobalVars.Table, "table", "", "") 122 flagSet.StringVar(&vari.GlobalVars.DBDsn, "dsn", "", "") 123 flagSet.StringVar(&vari.GlobalVars.DBType, "db", "db", "") 124 flagSet.StringVar(&vari.GlobalVars.DBType, "server", "mysql", "") // TODO: will remove 125 flagSet.BoolVar(&vari.GlobalVars.DBClear, "clear", false, "") 126 127 flagSet.StringVar(&vari.ProtoCls, "cls", "", "") 128 flagSet.StringVar(&vari.GlobalVars.MockDir, "mock", "", "") 129 130 flagSet.BoolVar(&vari.Verbose, "verbose", false, "") 131 132 flagSet.BoolVar(&help, "h", false, "") 133 flagSet.BoolVar(&help, "help", false, "") 134 flagSet.BoolVar(&version, "version", false, "") 135 136 flagSet.Parse(os.Args[1:]) 137 138 ExecCommand() 139 } 140 141 func ExecCommand() { 142 if len(os.Args) == 1 { 143 os.Args = append(os.Args, "-help") 144 } 145 146 files, count := fileUtils.GetFilesFromParams(os.Args[1:]) // zd.exe demo\default.yaml demo\test.yaml 147 flagSet.Parse(os.Args[1+count:]) 148 if count == 0 { // not has a def file list, use -d and -c files 149 files = []string{defaultFile, configFile} 150 } 151 152 configUtils.InitConfig(root) 153 vari.DB, _ = commandConfig.NewGormDB() 154 //defer vari.DB.Close() 155 156 flagSet.SetOutput(io.Discard) 157 if err := flagSet.Parse(os.Args[1:]); err == nil { 158 opts(files) 159 } else { 160 logUtils.PrintUsage() 161 } 162 } 163 164 func opts(files []string) { 165 if exportFields != "" { 166 vari.GlobalVars.ExportFields = strings.Split(exportFields, ",") 167 } 168 169 if version { 170 logUtils.PrintVersion(AppVersion, BuildTime, GoVersion, GitHash) 171 return 172 173 } else if help { 174 logUtils.PrintUsage() 175 return 176 } else if example { 177 logUtils.PrintExample() 178 return 179 } else if set { 180 helper.Set() 181 return 182 } else if listData { 183 helper.ListData() 184 return 185 } else if listRes { 186 helper.ListRes() 187 return 188 } else if view != "" { 189 helper.View(view) 190 return 191 } else if md5 != "" { 192 helper.AddMd5(md5, salt) 193 return 194 } else if parse { 195 action.GenYaml(input) 196 return 197 } else if mock { 198 if input == "" { 199 return 200 } 201 genMock(input) 202 203 return 204 } 205 206 action.GenData(files) 207 } 208 209 func genMock(input string) { 210 mainCtrl, _ := command.InitCtrl() 211 mainCtrl.GenMock(input) 212 } 213 214 func init() { 215 cleanup() 216 } 217 218 func cleanup() { 219 color.Unset() 220 }