package market import ( "context" "fmt" "sig-pub/api/pb" "sig-pub/pkg/grpc/session" "sig-pub/pkg/mapping" ) type MarketGrpcServer struct { pb.UnimplementedMarketServiceServer tradeInstanceService *TradeInstanceService } func NewMarketGrpcServer(instanceService *TradeInstanceService) *MarketGrpcServer { return &MarketGrpcServer{ tradeInstanceService: instanceService, } } func (svr *MarketGrpcServer) GetTradeInstance(ctx context.Context, req *pb.ReqGetTradeInstance) (rsp *pb.RspGetTradeInstance, err error) { subject, err := session.GetSubject(ctx) if err != nil { return } fmt.Printf("subject: %#v\n", subject) inst, err := svr.tradeInstanceService.GetInstance(req.InstId) if err != nil { return } rsp = &pb.RspGetTradeInstance{ Inst: mapping.TradeInstance2Proto(inst), } return } func (svr *MarketGrpcServer) AddTradeInstance(ctx context.Context, req *pb.ReqAddTradeInstance) (rsp *pb.RspAddTradeInstance, err error) { subject, err := session.GetSubject(ctx) if err != nil { return } inst := mapping.Proto2TradeInstance(req.Inst) err = svr.tradeInstanceService.InsertInstance(subject.Uid, inst) if err != nil { return } rsp = &pb.RspAddTradeInstance{ Inst: mapping.TradeInstance2Proto(inst), } return } // ListExchangeTradeInstance 获取指定交易所的正常状态的交易产品 func (svr *MarketGrpcServer) ListMarketTradeInstance(ctx context.Context, req *pb.ReqListMarketTradeInstance) (rsp *pb.RspListMarketTradeInstance, err error) { rsp = new(pb.RspListMarketTradeInstance) exchangeInsts, err := svr.tradeInstanceService.ListExchangeTradeInstance(req.Exchange) if err != nil { return } var instIds []string var exchangeInstMap = make(map[string]*pb.MarketTradeInstance) for _, exchangeInst := range exchangeInsts { instIds = append(instIds, exchangeInst.InstId) pbInst := &pb.MarketTradeInstance{ Exchange: req.Exchange, InstId: exchangeInst.InstId, ExchangeInstId: exchangeInst.ExchangeInstId, Status: exchangeInst.Status, } rsp.ExchangeInsts = append(rsp.ExchangeInsts, pbInst) exchangeInstMap[exchangeInst.InstId] = pbInst } tradeInsts, err := svr.tradeInstanceService.ListInstance(instIds...) for _, inst := range tradeInsts { if pbInst, ok := exchangeInstMap[inst.InstId]; ok { pbInst.InstType = pb.TradeInstanceType(inst.InstType) pbInst.InstCoin = inst.InstCoin pbInst.PriceSz = inst.PriceSz pbInst.QuantitySz = inst.QuantitySz pbInst.Leverages = inst.Leverages } } return }