github.com/goravel/framework@v1.13.9/database/console/seeder_make_command.go (about) 1 package console 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 8 "github.com/gookit/color" 9 10 "github.com/goravel/framework/contracts/console" 11 "github.com/goravel/framework/contracts/console/command" 12 "github.com/goravel/framework/support/file" 13 "github.com/goravel/framework/support/str" 14 ) 15 16 type SeederMakeCommand struct { 17 } 18 19 func NewSeederMakeCommand() *SeederMakeCommand { 20 return &SeederMakeCommand{} 21 } 22 23 // Signature The name and signature of the console command. 24 func (receiver *SeederMakeCommand) Signature() string { 25 return "make:seeder" 26 } 27 28 // Description The console command description. 29 func (receiver *SeederMakeCommand) Description() string { 30 return "Create a new seeder class" 31 } 32 33 // Extend The console command extend. 34 func (receiver *SeederMakeCommand) Extend() command.Extend { 35 return command.Extend{ 36 Category: "make", 37 } 38 } 39 40 // Handle Execute the console command. 41 func (receiver *SeederMakeCommand) Handle(ctx console.Context) error { 42 name := ctx.Argument(0) 43 if name == "" { 44 color.Redln("Not enough arguments (missing: name)") 45 46 return nil 47 } 48 49 if err := file.Create(receiver.getPath(name), receiver.populateStub(receiver.getStub(), name)); err != nil { 50 return err 51 } 52 53 color.Greenln("Seeder created successfully") 54 55 return nil 56 } 57 58 func (receiver *SeederMakeCommand) getStub() string { 59 return Stubs{}.Seeder() 60 } 61 62 // populateStub Populate the place-holders in the command stub. 63 func (receiver *SeederMakeCommand) populateStub(stub string, name string) string { 64 modelName, packageName, _ := receiver.parseName(name) 65 66 stub = strings.ReplaceAll(stub, "DummySeeder", str.Case2Camel(modelName)) 67 stub = strings.ReplaceAll(stub, "DummyPackage", packageName) 68 69 return stub 70 } 71 72 // getPath Get the full path to the command. 73 func (receiver *SeederMakeCommand) getPath(name string) string { 74 pwd, _ := os.Getwd() 75 76 modelName, _, folderPath := receiver.parseName(name) 77 78 return filepath.Join(pwd, "database", "seeders", folderPath, str.Camel2Case(modelName)+".go") 79 } 80 81 // parseName Parse the name to get the model name, package name and folder path. 82 func (receiver *SeederMakeCommand) parseName(name string) (string, string, string) { 83 name = strings.TrimSuffix(name, ".go") 84 85 segments := strings.Split(name, "/") 86 87 modelName := segments[len(segments)-1] 88 89 packageName := "seeders" 90 folderPath := "" 91 92 if len(segments) > 1 { 93 folderPath = filepath.Join(segments[:len(segments)-1]...) 94 packageName = segments[len(segments)-2] 95 } 96 97 return modelName, packageName, folderPath 98 }