github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/cmd/data.go (about) 1 package cmd 2 3 import ( 4 "github.com/iancoleman/strcase" 5 "github.com/yoogoc/kratos-scaffold/generator" 6 "github.com/yoogoc/kratos-scaffold/pkg/field" 7 "github.com/yoogoc/kratos-scaffold/pkg/util" 8 9 "github.com/spf13/cobra" 10 ) 11 12 func newDataCmd() *cobra.Command { 13 dataEnt := generator.NewData(settings) 14 var dataCmd = &cobra.Command{ 15 Use: "data [NAME] [FIELD]...", 16 Short: "generate data, data and data to biz file", 17 Long: `kratos-scaffold data -n user-service user id:int64:eq,in name:string:contains age:int32:gte,lte`, 18 FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true}, 19 RunE: func(cmd *cobra.Command, args []string) error { 20 if dataEnt.OrmType == "ent" { 21 return runDataEnt(dataEnt, args) 22 } 23 if dataEnt.OrmType == "proto" { 24 return runDataProto(dataEnt, args) 25 } 26 return nil 27 }, 28 } 29 30 addDataFlags(dataCmd, dataEnt) 31 32 return dataCmd 33 } 34 35 func addDataFlags(dataCmd *cobra.Command, dataEnt *generator.Data) { 36 dataCmd.PersistentFlags().BoolVarP(&dataEnt.NeedAuditField, "audit-field", "", true, "auto generate created_at and update_at fields, default is true") 37 dataCmd.PersistentFlags().StringVarP(&dataEnt.OrmType, "orm-type", "t", "ent", "orm type, value in (ent, proto), default is ent") 38 dataCmd.PersistentFlags().StringVarP(&dataEnt.TargetModel, "target-model", "m", "", "proto-orm required") 39 } 40 41 func runDataEnt(dataEnt *generator.Data, args []string) error { 42 modelName := args[0] 43 44 dataEnt.Name = util.Singular(strcase.ToCamel(modelName)) 45 if fs, err := field.ParseFields(args[1:]); err != nil { 46 return err 47 } else { 48 dataEnt.Fields = fs 49 } 50 51 if err := dataEnt.GenerateMigration(); err != nil { 52 return err 53 } 54 55 if err := dataEnt.GenerateEnt(); err != nil { 56 return err 57 } 58 return nil 59 } 60 61 func runDataProto(dataEnt *generator.Data, args []string) error { 62 modelName := args[0] 63 64 dataEnt.Name = util.Singular(strcase.ToCamel(modelName)) 65 if fs, err := field.ParseFields(args[1:]); err != nil { 66 return err 67 } else { 68 dataEnt.Fields = fs 69 } 70 71 err := dataEnt.GenerateProto() 72 return err 73 }