github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/cmd/service.go (about) 1 package cmd 2 3 import ( 4 "path" 5 6 "github.com/iancoleman/strcase" 7 "github.com/yoogoc/kratos-scaffold/generator" 8 "github.com/yoogoc/kratos-scaffold/pkg/field" 9 "github.com/yoogoc/kratos-scaffold/pkg/util" 10 11 "github.com/spf13/cobra" 12 ) 13 14 func newServiceCmd() *cobra.Command { 15 service := generator.NewService(settings) 16 var serviceCmd = &cobra.Command{ 17 Use: "service [NAME] [FIELD]...", 18 Short: "generate service and service to biz file", 19 Long: `kratos-scaffold service -n user-service user id:int64:eq,in name:string:contains age:int32:gte,lte`, 20 FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true}, 21 RunE: func(cmd *cobra.Command, args []string) error { 22 return runService(service, args) 23 }, 24 } 25 26 addServiceFlags(serviceCmd, service) 27 28 return serviceCmd 29 } 30 31 func addServiceFlags(serviceCmd *cobra.Command, service *generator.Service) { 32 serviceCmd.PersistentFlags().StringVarP(&service.ApiPath, "api-path", "", "", "proto path, default is <current-mod-name>/<api-dir-name>/<namespace | name>/v1") 33 serviceCmd.PersistentFlags().BoolVarP(&service.GenHttp, "http", "", false, "generate xx.http.pb.go") 34 } 35 36 func runService(service *generator.Service, args []string) error { 37 modelName := args[0] 38 39 service.Name = util.Singular(strcase.ToCamel(modelName)) 40 if fs, err := field.ParseFields(args[1:]); err != nil { 41 return err 42 } else { 43 service.Fields = fs 44 } 45 46 if service.ApiPath == "" { 47 apiModelName := "" 48 if service.Namespace != "" { 49 apiModelName = path.Join(service.ApiDirName, service.Namespace) 50 } else { 51 apiModelName = path.Join(service.ApiDirName, modelName) 52 } 53 service.ApiPath = path.Join(util.ModName(), apiModelName, "v1") 54 } 55 56 err := service.Generate() 57 return err 58 }