code.vegaprotocol.io/vega@v0.79.0/datanode/entities/referral_sets.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 entities 17 18 import ( 19 "encoding/json" 20 "fmt" 21 "time" 22 23 "code.vegaprotocol.io/vega/libs/num" 24 v2 "code.vegaprotocol.io/vega/protos/data-node/api/v2" 25 eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1" 26 ) 27 28 type ( 29 _ReferralSet struct{} 30 ReferralSetID = ID[_ReferralSet] 31 32 ReferralSet struct { 33 ID ReferralSetID 34 Referrer PartyID 35 TotalMembers uint64 36 CreatedAt time.Time 37 UpdatedAt time.Time 38 VegaTime time.Time 39 } 40 41 ReferralSetReferee struct { 42 ReferralSetID ReferralSetID 43 Referee PartyID 44 JoinedAt time.Time 45 AtEpoch uint64 46 VegaTime time.Time 47 } 48 49 ReferralSetRefereeStats struct { 50 ReferralSetReferee 51 PeriodVolume num.Decimal 52 PeriodRewardsPaid num.Decimal 53 } 54 55 ReferralSetCursor struct { 56 CreatedAt time.Time 57 ID ReferralSetID 58 } 59 60 ReferralSetRefereeCursor struct { 61 JoinedAt time.Time 62 Referee PartyID 63 } 64 ) 65 66 func ReferralSetFromProto(proto *eventspb.ReferralSetCreated, vegaTime time.Time) *ReferralSet { 67 return &ReferralSet{ 68 ID: ReferralSetID(proto.SetId), 69 Referrer: PartyID(proto.Referrer), 70 CreatedAt: time.Unix(0, proto.CreatedAt), 71 UpdatedAt: time.Unix(0, proto.UpdatedAt), 72 VegaTime: vegaTime, 73 } 74 } 75 76 func ReferralSetRefereeFromProto(proto *eventspb.RefereeJoinedReferralSet, vegaTime time.Time) *ReferralSetReferee { 77 return &ReferralSetReferee{ 78 ReferralSetID: ReferralSetID(proto.SetId), 79 Referee: PartyID(proto.Referee), 80 JoinedAt: time.Unix(0, proto.JoinedAt), 81 AtEpoch: proto.AtEpoch, 82 VegaTime: vegaTime, 83 } 84 } 85 86 func (rs ReferralSet) ToProto() *v2.ReferralSet { 87 return &v2.ReferralSet{ 88 Id: rs.ID.String(), 89 Referrer: rs.Referrer.String(), 90 TotalMembers: rs.TotalMembers, 91 CreatedAt: rs.CreatedAt.UnixNano(), 92 UpdatedAt: rs.UpdatedAt.UnixNano(), 93 } 94 } 95 96 func (rs ReferralSet) Cursor() *Cursor { 97 c := ReferralSetCursor{ 98 CreatedAt: rs.CreatedAt, 99 ID: rs.ID, 100 } 101 return NewCursor(c.ToString()) 102 } 103 104 func (rs ReferralSet) ToProtoEdge(_ ...any) (*v2.ReferralSetEdge, error) { 105 return &v2.ReferralSetEdge{ 106 Node: rs.ToProto(), 107 Cursor: rs.Cursor().Encode(), 108 }, nil 109 } 110 111 func (r ReferralSetReferee) ToProto() *v2.ReferralSetReferee { 112 return &v2.ReferralSetReferee{ 113 ReferralSetId: r.ReferralSetID.String(), 114 Referee: r.Referee.String(), 115 JoinedAt: r.JoinedAt.UnixNano(), 116 AtEpoch: r.AtEpoch, 117 } 118 } 119 120 func (r ReferralSetRefereeStats) ToProto() *v2.ReferralSetReferee { 121 return &v2.ReferralSetReferee{ 122 ReferralSetId: r.ReferralSetID.String(), 123 Referee: r.Referee.String(), 124 JoinedAt: r.JoinedAt.UnixNano(), 125 AtEpoch: r.AtEpoch, 126 TotalRefereeNotionalTakerVolume: r.PeriodVolume.String(), 127 TotalRefereeGeneratedRewards: r.PeriodRewardsPaid.String(), 128 } 129 } 130 131 func (r ReferralSetReferee) Cursor() *Cursor { 132 c := ReferralSetRefereeCursor{ 133 JoinedAt: r.JoinedAt, 134 Referee: r.Referee, 135 } 136 return NewCursor(c.ToString()) 137 } 138 139 func (r ReferralSetReferee) ToProtoEdge(_ ...any) (*v2.ReferralSetRefereeEdge, error) { 140 return &v2.ReferralSetRefereeEdge{ 141 Node: r.ToProto(), 142 Cursor: r.Cursor().Encode(), 143 }, nil 144 } 145 146 func (r ReferralSetRefereeStats) ToProtoEdge(_ ...any) (*v2.ReferralSetRefereeEdge, error) { 147 return &v2.ReferralSetRefereeEdge{ 148 Node: r.ToProto(), 149 Cursor: r.Cursor().Encode(), 150 }, nil 151 } 152 153 func (c ReferralSetCursor) ToString() string { 154 bs, err := json.Marshal(c) 155 if err != nil { 156 panic(fmt.Errorf("could not marshal referral set cursor: %v", err)) 157 } 158 return string(bs) 159 } 160 161 func (c *ReferralSetCursor) Parse(cursorString string) error { 162 if cursorString == "" { 163 return nil 164 } 165 return json.Unmarshal([]byte(cursorString), c) 166 } 167 168 func (c ReferralSetRefereeCursor) ToString() string { 169 bs, err := json.Marshal(c) 170 if err != nil { 171 panic(fmt.Errorf("could not marshal referral set referee cursor: %v", err)) 172 } 173 return string(bs) 174 } 175 176 func (c *ReferralSetRefereeCursor) Parse(cursorString string) error { 177 if cursorString == "" { 178 return nil 179 } 180 return json.Unmarshal([]byte(cursorString), c) 181 }