diff --git a/app.go b/app.go index 140e4c3..2f43b2e 100644 --- a/app.go +++ b/app.go @@ -3,8 +3,6 @@ package main import ( "embed" "html/template" - "os" - "path/filepath" ) func GenerateMain(FS embed.FS, cfg Config) error { @@ -14,18 +12,14 @@ func GenerateMain(FS embed.FS, cfg Config) error { } outputFile := "cmd/app/main.go" - fp := filepath.Dir(outputFile) - if err := os.MkdirAll(fp, 0777); err != nil { - return err - } - - f, err := os.Create(outputFile) + f, err := createFile(outputFile) if err != nil { - return nil + return err } if err := t.Execute(f, cfg); err != nil { return err } - return nil + + return f.Close() } diff --git a/db.go b/db.go index 7843f6d..87d49bd 100644 --- a/db.go +++ b/db.go @@ -3,8 +3,6 @@ package main import ( "embed" "html/template" - "os" - "path/filepath" "strings" ) @@ -14,21 +12,21 @@ type DataModel struct { } type DataProperty struct { - Name string `yaml:"name"` - Type string `yaml:"type"` - AutoIncrement bool `yaml:"autoinc"` + Name string `yaml:"name"` + Type string `yaml:"type"` } func (p DataProperty) NameCorrected() string { - if strings.Contains(p.Name, "_") { - parts := strings.Split(p.Name, "_") - newParts := []string{} - for _, p := range parts { - newParts = append(newParts, strings.Title(p)) - } - return strings.Join(newParts, "") + if !strings.Contains(p.Name, "_") { + return strings.Title(p.Name) } - return strings.Title(p.Name) + + parts := strings.Split(p.Name, "_") + newParts := []string{} + for _, p := range parts { + newParts = append(newParts, strings.Title(p)) + } + return strings.Join(newParts, "") } func (p DataProperty) DBTypeToGoType() string { @@ -52,15 +50,11 @@ func GenerateDataModels(FS embed.FS, cfg Config) error { } outputFile := "internal/storage/" + strings.ToLower(dm.Name) + ".go" - fp := filepath.Dir(outputFile) - if err := os.MkdirAll(fp, 0777); err != nil { + f, err := createFile(outputFile) + if err != nil { return err } - - f, err := os.Create(outputFile) - if err != nil { - return nil - } + defer f.Close() if err := t.Execute(f, dm); err != nil { return err diff --git a/example_project/tuugen.yml b/example_project/tuugen.yml index 29d5c48..66f556a 100644 --- a/example_project/tuugen.yml +++ b/example_project/tuugen.yml @@ -8,7 +8,6 @@ data_models: properties: - name: id type: varchar - autoinc: true - name: team_id type: varchar - name: name diff --git a/file.go b/file.go new file mode 100644 index 0000000..2b19498 --- /dev/null +++ b/file.go @@ -0,0 +1,19 @@ +package main + +import ( + "os" + "path/filepath" +) + +func createFile(path string) (*os.File, error) { + fp := filepath.Dir(path) + if err := os.MkdirAll(fp, 0777); err != nil { + return nil, err + } + + f, err := os.Create(path) + if err != nil { + return nil, err + } + return f, nil +} diff --git a/main.go b/main.go index 8b2c0bc..90a86ae 100644 --- a/main.go +++ b/main.go @@ -4,12 +4,14 @@ import ( "embed" "io/ioutil" "log" + "time" ) //go:embed templates/* var FS embed.FS func main() { + tNow := time.Now() // read config file d, err := ioutil.ReadFile("tuugen.yml") if err != nil { @@ -59,6 +61,6 @@ func main() { log.Fatalf("failed to run 'goimports': %v", err) } log.Println("------") - log.Println("🎉 All setup has been complete enjoy working on your business logic.") + log.Printf("🎉 All setup has been complete enjoy working on your business logic. took: %s\n", time.Since(tNow)) log.Println("------") } diff --git a/service.go b/service.go index b8ce13f..61ca3d4 100644 --- a/service.go +++ b/service.go @@ -7,7 +7,6 @@ import ( "go/parser" "go/token" "html/template" - "os" "path/filepath" "strings" ) @@ -50,23 +49,6 @@ func (s serviceFuncDef) ArgsToStr() string { // generate the service/interactor template and store it to a file. func createFileFromProto(FS embed.FS, cfg Config, templateFile, outputFile string) error { - // load service template - t, err := template.ParseFS(FS, templateFile) - if err != nil { - return err - } - - // check/create file path - fp := filepath.Dir(outputFile) - - if err := os.MkdirAll(fp, 0777); err != nil { - return err - } - - f, err := os.Create(outputFile) - if err != nil { - return nil - } def, err := parseProto(cfg) if err != nil { return err @@ -77,6 +59,16 @@ func createFileFromProto(FS embed.FS, cfg Config, templateFile, outputFile strin def.Imports = append(def.Imports, cfg.ImportPath+"/internal/interactors") } + f, err := createFile(outputFile) + if err != nil { + return err + } + + t, err := template.ParseFS(FS, templateFile) + if err != nil { + return err + } + if err := t.Execute(f, def); err != nil { return err }