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  }