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  }