Files
full/module/ec/mall/internal/server/new.go

84 lines
2.5 KiB
Go
Raw Normal View History

// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
pb "bsm/full/module/ec/mall/pb"
"git.apinb.com/bsm-sdk/core/vars"
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"google.golang.org/protobuf/proto"
"net/http"
"os"
"strings"
)
type Server struct {
Grpc *grpc.Server
Ctx context.Context
Mux *gwRuntime.ServeMux
}
func New(addr string) *Server {
srv := &Server{Ctx: context.Background(), Grpc: grpc.NewServer(), Mux: gwRuntime.NewServeMux(
gwRuntime.WithForwardResponseRewriter(responseEnvelope),
)}
// register service to grpc.Server
pb.RegisterAdsServer(srv.Grpc, NewAdsServer())
pb.RegisterCategoryServer(srv.Grpc, NewCategoryServer())
pb.RegisterFreightServer(srv.Grpc, NewFreightServer())
pb.RegisterNoticeServer(srv.Grpc, NewNoticeServer())
pb.RegisterProductServer(srv.Grpc, NewProductServer())
pb.RegisterStaffServer(srv.Grpc, NewStaffServer())
pb.RegisterStoreServer(srv.Grpc, NewStoreServer())
reflection.Register(srv.Grpc)
// 将服务注册到Gateway
opts := []grpc.DialOption{grpc.WithInsecure()}
pb.RegisterAdsHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterCategoryHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterFreightHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterNoticeHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterProductHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterStaffHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterStoreHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
// Register services swagger
srv.RegisterSwagger()
return srv
}
// RegisterSwagger 注册swagger
func (s *Server) RegisterSwagger() {
srvKey := strings.ToLower(vars.ServiceKey)
s.Mux.HandlePath("GET", "/"+srvKey+".swagger.json", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
w.Header().Set("Content-Type", "application/json")
bytes, err := os.ReadFile("./swagger/" + srvKey + ".swagger.json")
if err != nil {
w.WriteHeader(http.StatusNotFound)
w.Write([]byte(err.Error()))
return
}
w.Write(bytes)
return
})
}
// 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
}