github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/fizz/generate/migration.go (about) 1 package generate 2 3 import ( 4 "context" 5 "path/filepath" 6 7 "github.com/gobuffalo/attrs" 8 "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/generate" 9 "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/resource" 10 "github.com/gobuffalo/fizz" 11 "github.com/gobuffalo/flect/name" 12 "github.com/gobuffalo/genny/v2" 13 "github.com/gobuffalo/plugins" 14 "github.com/gobuffalo/plugins/plugcmd" 15 "github.com/gobuffalo/plugins/plugprint" 16 "github.com/gobuffalo/pop/v5" 17 "github.com/gobuffalo/pop/v5/genny/fizz/ctable" 18 "github.com/gobuffalo/pop/v5/soda/cmd" 19 "github.com/spf13/pflag" 20 ) 21 22 var _ generate.Generator = &Migration{} 23 var _ plugcmd.Namer = Migration{} 24 var _ plugins.Plugin = Migration{} 25 var _ plugprint.Describer = Migration{} 26 var _ plugprint.FlagPrinter = &Migration{} 27 var _ resource.Migrationer = &Migration{} 28 var _ resource.Pflagger = &Migration{} 29 30 type Migration struct { 31 env string 32 migrationType string 33 path string 34 tableName string 35 flags *pflag.FlagSet 36 } 37 38 func (Migration) PluginName() string { 39 return "fizz/migration" 40 } 41 42 func (Migration) CmdName() string { 43 return "migration" 44 } 45 46 func (Migration) Description() string { 47 return "Generate a fizz migration" 48 } 49 50 func (mg *Migration) Generate(ctx context.Context, root string, args []string) error { 51 args = append([]string{"generate", "migration"}, args...) 52 cmd.RootCmd.SetArgs(args) 53 return cmd.RootCmd.Execute() 54 } 55 56 func (mg *Migration) GenerateResourceMigrations(ctx context.Context, root string, args []string) error { 57 path := mg.path 58 if len(path) == 0 { 59 path = filepath.Join(root, "migrations") 60 } 61 62 env := mg.env 63 if len(env) == 0 { 64 env = "development" 65 } 66 67 mt := mg.migrationType 68 if len(mt) == 0 { 69 mt = "fizz" 70 } 71 72 var translator fizz.Translator 73 if mt == "sql" { 74 db, err := pop.Connect(env) 75 if err != nil { 76 return err 77 } 78 translator = db.Dialect.FizzTranslator() 79 } 80 81 atts, err := attrs.ParseArgs(args[1:]...) 82 if err != nil { 83 return err 84 } 85 86 nm := mg.tableName 87 if len(nm) == 0 { 88 nm = args[0] 89 } 90 model := name.New(nm) 91 92 g, err := ctable.New(&ctable.Options{ 93 TableName: model.Tableize().String(), 94 Attrs: atts, 95 Path: path, 96 Type: mt, 97 Translator: translator, 98 ForceDefaultID: true, 99 ForceDefaultTimestamps: true, 100 }) 101 if err != nil { 102 return err 103 } 104 105 run := genny.WetRunner(ctx) 106 run.With(g) 107 return run.Run() 108 }