code.vegaprotocol.io/vega@v0.79.0/datanode/gateway/graphql/benefit_tier_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 "strconv" 22 23 "code.vegaprotocol.io/vega/libs/num" 24 "code.vegaprotocol.io/vega/protos/vega" 25 ) 26 27 type benefitTierResolver VegaResolverRoot 28 29 // ReferralRewardFactors implements BenefitTierResolver. 30 func (br *benefitTierResolver) ReferralRewardFactors(ctx context.Context, obj *vega.BenefitTier) (*RewardFactors, error) { 31 infra, err := num.DecimalFromString(obj.ReferralRewardFactors.InfrastructureRewardFactor) 32 if err != nil { 33 return nil, err 34 } 35 maker, err := num.DecimalFromString(obj.ReferralRewardFactors.MakerRewardFactor) 36 if err != nil { 37 return nil, err 38 } 39 liq, err := num.DecimalFromString(obj.ReferralRewardFactors.LiquidityRewardFactor) 40 if err != nil { 41 return nil, err 42 } 43 return &RewardFactors{ 44 InfrastructureFactor: infra.String(), 45 MakerFactor: maker.String(), 46 LiquidityFactor: liq.String(), 47 }, nil 48 } 49 50 // Referrals implements BenefitTierResolver. 51 func (br *benefitTierResolver) ReferralDiscountFactors(ctx context.Context, obj *vega.BenefitTier) (*DiscountFactors, error) { 52 infra, err := num.DecimalFromString(obj.ReferralDiscountFactors.InfrastructureDiscountFactor) 53 if err != nil { 54 return nil, err 55 } 56 maker, err := num.DecimalFromString(obj.ReferralDiscountFactors.MakerDiscountFactor) 57 if err != nil { 58 return nil, err 59 } 60 liq, err := num.DecimalFromString(obj.ReferralDiscountFactors.LiquidityDiscountFactor) 61 if err != nil { 62 return nil, err 63 } 64 return &DiscountFactors{ 65 InfrastructureFactor: infra.String(), 66 MakerFactor: maker.String(), 67 LiquidityFactor: liq.String(), 68 }, nil 69 } 70 71 func (br *benefitTierResolver) MinimumEpochs(_ context.Context, obj *vega.BenefitTier) (int, error) { 72 minEpochs, err := strconv.ParseInt(obj.MinimumEpochs, 10, 64) 73 if err != nil { 74 return 0, fmt.Errorf("failed to parse minimum epochs %s: %v", obj.MinimumEpochs, err) 75 } 76 77 return int(minEpochs), nil 78 } 79 80 func (v *benefitTierResolver) TierNumber(_ context.Context, obj *vega.BenefitTier) (*int, error) { 81 if obj.TierNumber == nil { 82 return nil, nil 83 } 84 i := int(*obj.TierNumber) 85 return &i, nil 86 } 87 88 type volumeBenefitTierResolver VegaResolverRoot 89 90 // VolumeDiscountFactors implements VolumeBenefitTierResolver. 91 func (v *volumeBenefitTierResolver) VolumeDiscountFactors(ctx context.Context, obj *vega.VolumeBenefitTier) (*DiscountFactors, error) { 92 infra, err := num.DecimalFromString(obj.VolumeDiscountFactors.InfrastructureDiscountFactor) 93 if err != nil { 94 return nil, err 95 } 96 maker, err := num.DecimalFromString(obj.VolumeDiscountFactors.MakerDiscountFactor) 97 if err != nil { 98 return nil, err 99 } 100 liq, err := num.DecimalFromString(obj.VolumeDiscountFactors.LiquidityDiscountFactor) 101 if err != nil { 102 return nil, err 103 } 104 return &DiscountFactors{ 105 InfrastructureFactor: infra.String(), 106 MakerFactor: maker.String(), 107 LiquidityFactor: liq.String(), 108 }, nil 109 } 110 111 func (v *volumeBenefitTierResolver) TierNumber(_ context.Context, obj *vega.VolumeBenefitTier) (*int, error) { 112 if obj.TierNumber == nil { 113 return nil, nil 114 } 115 i := int(*obj.TierNumber) 116 return &i, nil 117 }