github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/command/init.go (about) 1 package command 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 "path/filepath" 8 "strings" 9 10 consts "github.com/easysoft/zendata/internal/pkg/const" 11 "github.com/easysoft/zendata/internal/pkg/ctrl" 12 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 13 i118Utils "github.com/easysoft/zendata/pkg/utils/i118" 14 logUtils "github.com/easysoft/zendata/pkg/utils/log" 15 stringUtils "github.com/easysoft/zendata/pkg/utils/string" 16 "github.com/easysoft/zendata/pkg/utils/vari" 17 "github.com/facebookgo/inject" 18 ) 19 20 func InitCtrl() (defCtrl *ctrl.MainCtrl, err error) { 21 defCtrl = &ctrl.MainCtrl{} 22 23 var g inject.Graph 24 25 if err := g.Provide( 26 &inject.Object{Value: vari.DB}, 27 &inject.Object{Value: defCtrl}, 28 ); err != nil { 29 logUtils.PrintErrMsg(fmt.Sprintf("provide usecase objects to the Graph: %v", err)) 30 } 31 err = g.Populate() 32 if err != nil { 33 logUtils.PrintErrMsg(fmt.Sprintf("populate the incomplete Objects: %v", err)) 34 } 35 36 return 37 } 38 39 func SetOutFormat() (err error) { 40 if vari.GlobalVars.Output != "" { 41 fileUtils.MkDirIfNeeded(filepath.Dir(vari.GlobalVars.Output)) 42 fileUtils.RemoveExist(vari.GlobalVars.Output) 43 44 ext := strings.ToLower(filepath.Ext(vari.GlobalVars.Output)) 45 ext = strings.TrimLeft(ext, ".") 46 47 if stringUtils.InArray(ext, consts.Formats) { 48 vari.GlobalVars.OutputFormat = ext 49 } 50 51 // create file writer 52 if vari.GlobalVars.OutputFormat == consts.FormatExcel { 53 logUtils.OutputFilePath = vari.GlobalVars.Output 54 } else { 55 logUtils.OutputFileWriter, _ = os.OpenFile(vari.GlobalVars.Output, os.O_RDWR|os.O_CREATE, 0777) 56 } 57 } 58 59 if vari.GlobalVars.DBDsn != "" { 60 vari.GlobalVars.OutputFormat = consts.FormatSql 61 } 62 63 if vari.GlobalVars.OutputFormat == consts.FormatSql && vari.GlobalVars.Table == "" { 64 msg := i118Utils.I118Prt.Sprintf("miss_table_name") 65 logUtils.PrintErrMsg(msg) 66 err = errors.New(msg) 67 } 68 69 return 70 }