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.

131 lines
4.0 KiB

2 months ago
package service
import (
"context"
"matchmaking-system/internal/pkg/flags"
"matchmaking-system/internal/service/virtual"
v1 "matchmaking-system/api/matchmaking/v1/virtually"
)
// GetBotContractTrade
//
// @Description: 合约订单列表
// @receiver s
// @param ctx
// @param req
// @return *v1.GetBotContractTradeReply
// @return error
func (s *ConduitService) GetBotContractTrade(ctx context.Context, req *v1.GetBotContractTradeRequest) (*v1.GetBotContractTradeReply, error) {
if !virtual.VerificationBotContractTrade(req) {
return virtual.BotContractTradeReply(false, flags.ErrIsParameter.Error(), req, nil, 0), nil
}
contractTradeList, totalCount, err := s.co.BotContractTradeList(ctx, req.PageSize, req.PageCount, req.Status)
if err != nil {
return virtual.BotContractTradeReply(false, err.Error(), req, nil, 0), nil
}
return virtual.BotContractTradeReply(true, flags.SetNull, req, contractTradeList, totalCount), nil
}
// ContractPlaceOrder
//
// @Description: 合约下单
// @receiver s
// @param ctx
// @param req
// @return *v1.ContractReply
// @return error
func (s *ConduitService) ContractPlaceOrder(ctx context.Context, req *v1.ContractRequest) (*v1.ContractReply, error) {
if !virtual.VerificationContractPlaceOrder(req) {
return virtual.ContractPlaceOrderReply(false, flags.ErrIsParameter.Error(), flags.SetNull), nil
}
orderId, err := s.co.ContractPlaceOrder(ctx, virtual.ContractOrderQuery(req))
if err != nil {
return virtual.ContractPlaceOrderReply(false, err.Error(), flags.SetNull), nil
}
return virtual.ContractPlaceOrderReply(true, flags.SetNull, orderId), nil
}
// ContractUpdatePlaceOrder
//
// @Description: 合约设置止盈止损
// @receiver s
// @param ctx
// @param req
// @return *v1.ContractReply
// @return error
func (s *ConduitService) ContractUpdatePlaceOrder(ctx context.Context, req *v1.UpdateContractRequest) (*v1.ContractReply, error) {
if !virtual.VerificationContractUpdatePlaceOrder(req) {
return virtual.ContractUpdatePlaceOrderReply(false, flags.ErrIsParameter.Error(), req), nil
}
_, err := s.co.ContractUpdatePlaceOrder(ctx, virtual.ContractStopQuery(req))
if err != nil {
return virtual.ContractUpdatePlaceOrderReply(false, err.Error(), req), nil
}
return virtual.ContractUpdatePlaceOrderReply(true, flags.SetNull, req), nil
}
// ContractPosition
//
// @Description: 合约平仓
// @receiver s
// @param ctx
// @param req
// @return *v1.ContractReply
// @return error
func (s *ConduitService) ContractPosition(ctx context.Context, req *v1.CancelContractRequest) (*v1.ContractReply, error) {
if !virtual.VerificationContractPosition(req) {
return virtual.ContractPositionOrderReply(false, flags.ErrIsParameter.Error(), req), nil
}
_, err := s.co.ContractPosition(ctx, req.OrderId)
if err != nil {
return virtual.ContractPositionOrderReply(false, err.Error(), req), nil
}
return virtual.ContractPositionOrderReply(true, flags.SetNull, req), nil
}
// ContractAllPosition
//
// @Description: 合约一键平仓
// @receiver s
// @param ctx
// @param req
// @return *v1.AllContractReply
// @return error
func (s *ConduitService) ContractAllPosition(ctx context.Context, req *v1.AllContractRequest) (*v1.AllContractReply, error) {
if err := s.co.ContractAllPosition(ctx); err != nil {
return virtual.ContractAllPositionReply(false, err.Error()), nil
}
return virtual.ContractAllPositionReply(true, flags.SetNull), nil
}
// ContractCancel
//
// @Description: 合约撤单
// @receiver s
// @param ctx
// @param req
// @return *v1.ContractReply
// @return error
func (s *ConduitService) ContractCancel(ctx context.Context, req *v1.CancelContractRequest) (*v1.ContractReply, error) {
if !virtual.VerificationContractCancel(req) {
return virtual.ContractCancelOrderReply(false, flags.ErrIsParameter.Error(), req), nil
}
_, err := s.co.ContractCancel(ctx, req.OrderId)
if err != nil {
return virtual.ContractCancelOrderReply(false, err.Error(), req), nil
}
return virtual.ContractCancelOrderReply(true, flags.SetNull, req), nil
}