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