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

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.ListInstanceById(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
}