package migrator import ( "fmt" "strings" "github.com/urfave/cli/v2" "go.neonxp.ru/framework/cmd/app/migrator/migrate" "go.neonxp.ru/framework/cmd/app/migrator/migrator" "go.neonxp.ru/framework/migrations" ) func Migrator() *cli.Command { return &cli.Command{ Name: "db", Usage: "manage database migrations", Subcommands: []*cli.Command{ { Name: "init", Usage: "create migration tables", Flags: []cli.Flag{ &cli.StringFlag{ Name: "config", Value: "./config/config.yaml", Usage: "config", }, }, Action: migrate.Init, }, { Name: "migrate", Usage: "migrate database", Flags: []cli.Flag{ &cli.StringFlag{ Name: "config", Value: "./config/config.yaml", Usage: "config", }, }, Action: migrate.Migrate, }, { Name: "rollback", Usage: "rollback the last migration group", Flags: []cli.Flag{ &cli.StringFlag{ Name: "config", Value: "./config/config.yaml", Usage: "config", }, }, Action: migrate.Rollback, }, { Name: "create", Usage: "create migration", Flags: []cli.Flag{ &cli.StringFlag{ Name: "config", Value: "./config/config.yaml", Usage: "config", }, }, Action: func(c *cli.Context) error { migrator, err := migrator.New(c, migrations.Migrations) if err != nil { return err } name := strings.Join(c.Args().Slice(), "_") mf, err := migrator.CreateGoMigration(c.Context, name) if err != nil { return err } fmt.Printf("created migration %s (%s)\n", mf.Name, mf.Path) return nil }, }, }, } }