code.vegaprotocol.io/vega@v0.79.0/datanode/gateway/graphql/stop_order_resolver.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package gql
    17  
    18  import (
    19  	"context"
    20  	"fmt"
    21  
    22  	"code.vegaprotocol.io/vega/libs/ptr"
    23  	v2 "code.vegaprotocol.io/vega/protos/data-node/api/v2"
    24  	"code.vegaprotocol.io/vega/protos/vega"
    25  	eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1"
    26  )
    27  
    28  type stopOrderResolver VegaResolverRoot
    29  
    30  func (s stopOrderResolver) ID(_ context.Context, obj *eventspb.StopOrderEvent) (string, error) {
    31  	if obj == nil || obj.StopOrder == nil {
    32  		return "", ErrInvalidStopOrder
    33  	}
    34  	return obj.StopOrder.Id, nil
    35  }
    36  
    37  func (s stopOrderResolver) OcoLinkID(_ context.Context, obj *eventspb.StopOrderEvent) (*string, error) {
    38  	if obj == nil || obj.StopOrder == nil {
    39  		return nil, ErrInvalidStopOrder
    40  	}
    41  	return obj.StopOrder.OcoLinkId, nil
    42  }
    43  
    44  func (s stopOrderResolver) ExpiresAt(_ context.Context, obj *eventspb.StopOrderEvent) (*int64, error) {
    45  	if obj == nil || obj.StopOrder == nil {
    46  		return nil, ErrInvalidStopOrder
    47  	}
    48  	return obj.StopOrder.ExpiresAt, nil
    49  }
    50  
    51  func (s stopOrderResolver) ExpiryStrategy(_ context.Context, obj *eventspb.StopOrderEvent) (*vega.StopOrder_ExpiryStrategy, error) {
    52  	if obj == nil || obj.StopOrder == nil {
    53  		return nil, ErrInvalidStopOrder
    54  	}
    55  	return obj.StopOrder.ExpiryStrategy, nil
    56  }
    57  
    58  func (s stopOrderResolver) TriggerDirection(_ context.Context, obj *eventspb.StopOrderEvent) (vega.StopOrder_TriggerDirection, error) {
    59  	if obj == nil || obj.StopOrder == nil {
    60  		return vega.StopOrder_TRIGGER_DIRECTION_UNSPECIFIED, ErrInvalidStopOrder
    61  	}
    62  	return obj.StopOrder.TriggerDirection, nil
    63  }
    64  
    65  func (s stopOrderResolver) Status(_ context.Context, obj *eventspb.StopOrderEvent) (vega.StopOrder_Status, error) {
    66  	if obj == nil || obj.StopOrder == nil {
    67  		return vega.StopOrder_STATUS_UNSPECIFIED, ErrInvalidStopOrder
    68  	}
    69  	return obj.StopOrder.Status, nil
    70  }
    71  
    72  func (s stopOrderResolver) CreatedAt(_ context.Context, obj *eventspb.StopOrderEvent) (int64, error) {
    73  	if obj == nil || obj.StopOrder == nil {
    74  		return 0, ErrInvalidStopOrder
    75  	}
    76  	return obj.StopOrder.CreatedAt, nil
    77  }
    78  
    79  func (s stopOrderResolver) UpdatedAt(_ context.Context, obj *eventspb.StopOrderEvent) (*int64, error) {
    80  	if obj == nil || obj.StopOrder == nil {
    81  		return nil, ErrInvalidStopOrder
    82  	}
    83  	return obj.StopOrder.UpdatedAt, nil
    84  }
    85  
    86  func (s stopOrderResolver) PartyID(_ context.Context, obj *eventspb.StopOrderEvent) (string, error) {
    87  	if obj == nil || obj.StopOrder == nil {
    88  		return "", ErrInvalidStopOrder
    89  	}
    90  	return obj.StopOrder.PartyId, nil
    91  }
    92  
    93  func (s stopOrderResolver) MarketID(_ context.Context, obj *eventspb.StopOrderEvent) (string, error) {
    94  	if obj == nil || obj.StopOrder == nil {
    95  		return "", ErrInvalidStopOrder
    96  	}
    97  	return obj.StopOrder.MarketId, nil
    98  }
    99  
   100  func (s stopOrderResolver) Trigger(_ context.Context, obj *eventspb.StopOrderEvent) (StopOrderTrigger, error) {
   101  	if obj == nil || obj.StopOrder == nil {
   102  		return nil, ErrInvalidStopOrder
   103  	}
   104  	switch t := obj.StopOrder.Trigger.(type) {
   105  	case *vega.StopOrder_Price:
   106  		return StopOrderPrice{
   107  			Price: t.Price,
   108  		}, nil
   109  	case *vega.StopOrder_TrailingPercentOffset:
   110  		return StopOrderTrailingPercentOffset{
   111  			TrailingPercentOffset: t.TrailingPercentOffset,
   112  		}, nil
   113  	default:
   114  		return nil, fmt.Errorf("unknown trigger type: %T", t)
   115  	}
   116  }
   117  
   118  func (s stopOrderResolver) Order(ctx context.Context, obj *eventspb.StopOrderEvent) (*vega.Order, error) {
   119  	// no order triggeerd yet
   120  	if len(obj.StopOrder.OrderId) <= 0 {
   121  		return nil, nil
   122  	}
   123  
   124  	return s.r.getOrderByID(ctx, obj.StopOrder.OrderId, nil)
   125  }
   126  
   127  func (s stopOrderResolver) RejectionReason(ctx context.Context, obj *eventspb.StopOrderEvent) (*vega.StopOrder_RejectionReason, error) {
   128  	return obj.StopOrder.RejectionReason, nil
   129  }
   130  
   131  func (s stopOrderResolver) SizeOverrideSetting(_ context.Context, obj *eventspb.StopOrderEvent) (vega.StopOrder_SizeOverrideSetting, error) {
   132  	return obj.StopOrder.SizeOverrideSetting, nil
   133  }
   134  
   135  func (s stopOrderResolver) SizeOverrideValue(_ context.Context, obj *eventspb.StopOrderEvent) (*string, error) {
   136  	if obj.StopOrder.SizeOverrideValue == nil {
   137  		return nil, nil
   138  	}
   139  	return ptr.From(obj.StopOrder.SizeOverrideValue.Percentage), nil
   140  }
   141  
   142  type stopOrderFilterResolver VegaResolverRoot
   143  
   144  func (s stopOrderFilterResolver) Parties(ctx context.Context, obj *v2.StopOrderFilter, data []string) error {
   145  	if obj == nil {
   146  		obj = &v2.StopOrderFilter{}
   147  	}
   148  	obj.PartyIds = data
   149  	return nil
   150  }
   151  
   152  func (s stopOrderFilterResolver) Markets(ctx context.Context, obj *v2.StopOrderFilter, data []string) error {
   153  	if obj == nil {
   154  		obj = &v2.StopOrderFilter{}
   155  	}
   156  	obj.MarketIds = data
   157  	return nil
   158  }
   159  
   160  func (s stopOrderFilterResolver) Status(ctx context.Context, obj *v2.StopOrderFilter, data []vega.StopOrder_Status) error {
   161  	if obj == nil {
   162  		obj = &v2.StopOrderFilter{}
   163  	}
   164  	obj.Statuses = data
   165  	return nil
   166  }
   167  
   168  func (s stopOrderFilterResolver) ExpiryStrategy(ctx context.Context, obj *v2.StopOrderFilter, data []vega.StopOrder_ExpiryStrategy) error {
   169  	if obj == nil {
   170  		obj = &v2.StopOrderFilter{}
   171  	}
   172  	obj.ExpiryStrategies = data
   173  	return nil
   174  }