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  }