diff --git a/main.go b/main.go index 310f42b..ae08d3d 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "errors" "fmt" "go/format" @@ -9,6 +10,7 @@ import ( "path/filepath" "regexp" "strings" + "unicode" "git.apinb.com/bsm-tools/protoc-gen-slc/tpl" @@ -108,13 +110,13 @@ func generateNewServerFile(services []string) error { } func generateServerFile(gen *protogen.Plugin, file *protogen.File, service *protogen.Service) error { - filename := fmt.Sprintf("./internal/server/%s_server.go", strings.ToLower(service.GoName)) + filename := fmt.Sprintf("./internal/server/%s_server.go", toSnakeCase(service.GoName)) moduleName := getModuleName() //create servers. code := tpl.Server imports := []string{ - "\"" + moduleName + "/internal/logic/" + strings.ToLower(service.GoName) + "\"", + "\"" + moduleName + "/internal/logic/" + toSnakeCase(service.GoName) + "\"", "pb \"" + moduleName + "/pb\"", } @@ -147,7 +149,7 @@ func generateServerFile(gen *protogen.Plugin, file *protogen.File, service *prot } func generateLogicFile(gen *protogen.Plugin, file *protogen.File, service *protogen.Service) error { - logicPath := "./internal/logic/" + strings.ToLower(service.GoName) + logicPath := "./internal/logic/" + toSnakeCase(service.GoName) if !utils.PathExists(logicPath) { os.MkdirAll(logicPath, os.ModePerm) } @@ -285,3 +287,20 @@ func parseOptions(comment string) map[string]string { return result } + +// CamelToSnake 将驼峰命名转换为下划线命名 +func CamelToSnake(s string) string { + var buf bytes.Buffer + for i, r := range s { + if unicode.IsUpper(r) { + // 如果不是第一个字符,添加下划线 + if i > 0 { + buf.WriteRune('_') + } + buf.WriteRune(unicode.ToLower(r)) + } else { + buf.WriteRune(r) + } + } + return buf.String() +} diff --git a/tpl/logic.go b/tpl/logic.go index cf45af5..b054f49 100644 --- a/tpl/logic.go +++ b/tpl/logic.go @@ -45,8 +45,8 @@ var FetchValidCode = ` var StatusReplyCode = ` return &pb.StatusReply{ - Status: 200, - Message: "ok", - Timeseq: time.Now().UnixNano(), + Code: 0, + Message: "OK", + Timeseq: time.Now().UnixMilli(), }, nil ` diff --git a/tpl/server.go b/tpl/server.go index ffd90c7..1491665 100644 --- a/tpl/server.go +++ b/tpl/server.go @@ -13,6 +13,7 @@ import ( "git.apinb.com/bsm-sdk/core/vars" "google.golang.org/grpc" "google.golang.org/grpc/reflection" + "google.golang.org/protobuf/proto" gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) @@ -23,7 +24,9 @@ type Server struct { } func New(addr string) *Server { - srv := &Server{Ctx: context.Background(), Grpc: grpc.NewServer(), Mux: gwRuntime.NewServeMux()} + srv := &Server{Ctx: context.Background(), Grpc: grpc.NewServer(), Mux: gwRuntime.NewServeMux( + gwRuntime.WithForwardResponseRewriter(responseEnvelope), + )} // register service to grpc.Server {register} @@ -58,6 +61,19 @@ func (s *Server) RegisterSwagger() { }) } +// response envelope +func responseEnvelope(_ context.Context, response proto.Message) (interface{}, error) { + name := string(response.ProtoReflect().Descriptor().Name()) + if name == "Status" || name == "Error" || name == "StatusReply" { + return response, nil + } + return map[string]any{ + "code": 0, + "message": "OK", + "result": response, + }, nil +} + ` var Server = `