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  }