github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/project_generator/resources/cmd.migration.go.tmpl (about) 1 {{- /*gotype: github.com/yoogoc/kratos-scaffold/project_generator.CmdTmpl*/ -}} 2 package main 3 4 import ( 5 "{{.AppPkgPath}}/internal/conf" 6 7 "github.com/go-kratos/kratos/v2/log" 8 "github.com/spf13/cobra" 9 "github.com/pressly/goose/v3" 10 ) 11 12 type MigrateCommand cobra.Command 13 14 func NewMigrateCmd(logger log.Logger, conf *conf.Data) *MigrateCommand { 15 16 var table string 17 var dir string 18 var verbose bool 19 20 migrateCmd := &MigrateCommand{ 21 Use: "migrate", 22 Short: "migrate database", 23 Long: "migrate power by goose, show more in https://github.com/pressly/goose#usage", 24 FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true}, 25 RunE: func(cmd *cobra.Command, args []string) error { 26 if verbose { 27 goose.SetVerbose(true) 28 } 29 goose.SetTableName(table) 30 if len(args) == 0 { 31 return cmd.Usage() 32 } 33 34 switch args[0] { 35 case "create": 36 return goose.Run("create", nil, dir, args[1:]...) 37 case "fix": 38 return goose.Run("fix", nil, dir) 39 } 40 41 command := args[0] 42 43 db, err := goose.OpenDBWithDriver(conf.Database.Driver, conf.Database.Source) 44 if err != nil { 45 log.Fatalf("db driver=%s, db string=%s: %s\n", "mysql", conf.Database.Source, err.Error()) 46 return err 47 } 48 defer func() { 49 if err := db.Close(); err != nil { 50 log.Fatalf("goose: failed to close DB: %v\n", err) 51 } 52 }() 53 54 var arguments []string 55 if len(args) > 3 { 56 arguments = append(arguments, args[3:]...) 57 } 58 59 return goose.Run(command, db, dir, arguments...) 60 }, 61 } 62 63 flags := (*cobra.Command)(migrateCmd).PersistentFlags() 64 flags.StringVarP(&dir, "dir", "", "./db/migration", "enable verbose mode") 65 flags.StringVarP(&table, "table", "", "goose_db_version", "migrations table name") 66 flags.BoolVarP(&verbose, "verbose", "v", false, "enable verbose mode") 67 68 return migrateCmd 69 }