You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.5 KiB
90 lines
2.5 KiB
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 |
|
}
|
|
|