github.com/wawandco/ox@v0.13.6-0.20230809142027-913b3d837f2a/plugins/tools/soda/sql/sql.go (about) 1 package sql 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "time" 8 9 "github.com/wawandco/ox/internal/log" 10 ) 11 12 // Creator model struct for fizz generation files 13 type Creator struct{} 14 15 // Name is the name of the migration type 16 func (s Creator) Name() string { 17 return "sql" 18 } 19 20 // Creates a type or not 21 func (f Creator) Creates(mtype string) bool { 22 return mtype == "sql" 23 } 24 25 // Create will create 2 .sql empty files for the migration 26 func (s Creator) Create(dir, name string, args []string) error { 27 timestamp := time.Now().UTC().Format("20060102150405") 28 fileName := fmt.Sprintf("%s_%s", timestamp, name) 29 30 if err := s.createFile(dir, fileName, "up"); err != nil { 31 return err 32 } 33 34 if err := s.createFile(dir, fileName, "down"); err != nil { 35 return err 36 } 37 38 log.Infof("generated: %s/%s.up.sql", dir, fileName) 39 log.Infof("generated: %s/%s.down.sql", dir, fileName) 40 41 return nil 42 } 43 44 func (s Creator) createFile(dir, name, runFlag string) error { 45 fileName := fmt.Sprintf("%s.%s.sql", name, runFlag) 46 file, err := os.Create(filepath.Join(dir, fileName)) 47 if err != nil { 48 return fmt.Errorf("error creating file: %w", err) 49 } 50 51 defer file.Close() 52 53 return err 54 }