code.vegaprotocol.io/vega@v0.79.0/datanode/sqlsubscribers/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 sqlsubscribers
    17  
    18  import (
    19  	"context"
    20  
    21  	"code.vegaprotocol.io/vega/core/events"
    22  	"code.vegaprotocol.io/vega/datanode/entities"
    23  	eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1"
    24  )
    25  
    26  type (
    27  	ReferralSetCreatedEvent interface {
    28  		events.Event
    29  		GetProtoEvent() *eventspb.ReferralSetCreated
    30  	}
    31  
    32  	RefereeJoinedReferralSetEvent interface {
    33  		events.Event
    34  		GetProtoEvent() *eventspb.RefereeJoinedReferralSet
    35  	}
    36  
    37  	ReferralSetStatsUpdatedEvent interface {
    38  		events.Event
    39  		GetProtoEvent() *eventspb.ReferralSetStatsUpdated
    40  	}
    41  
    42  	ReferralSetsStore interface {
    43  		AddReferralSet(ctx context.Context, referralSet *entities.ReferralSet) error
    44  		RefereeJoinedReferralSet(ctx context.Context, referee *entities.ReferralSetReferee) error
    45  		AddReferralSetStats(ctx context.Context, stats *entities.ReferralSetStats) error
    46  	}
    47  
    48  	ReferralSets struct {
    49  		subscriber
    50  		store ReferralSetsStore
    51  	}
    52  )
    53  
    54  func NewReferralSets(store ReferralSetsStore) *ReferralSets {
    55  	return &ReferralSets{
    56  		store: store,
    57  	}
    58  }
    59  
    60  func (rs *ReferralSets) Types() []events.Type {
    61  	return []events.Type{
    62  		events.ReferralSetCreatedEvent,
    63  		events.RefereeJoinedReferralSetEvent,
    64  		events.ReferralSetStatsUpdatedEvent,
    65  	}
    66  }
    67  
    68  func (rs *ReferralSets) Push(ctx context.Context, evt events.Event) error {
    69  	switch e := evt.(type) {
    70  	case ReferralSetCreatedEvent:
    71  		return rs.consumeReferralSetCreatedEvent(ctx, e)
    72  	case RefereeJoinedReferralSetEvent:
    73  		return rs.consumeRefereeJoinedReferralSetEvent(ctx, e)
    74  	case ReferralSetStatsUpdatedEvent:
    75  		return rs.consumeReferralSetStatsUpdated(ctx, e)
    76  	default:
    77  		return nil
    78  	}
    79  }
    80  
    81  func (rs *ReferralSets) consumeReferralSetCreatedEvent(ctx context.Context, e ReferralSetCreatedEvent) error {
    82  	referralSet := entities.ReferralSetFromProto(e.GetProtoEvent(), rs.vegaTime)
    83  	return rs.store.AddReferralSet(ctx, referralSet)
    84  }
    85  
    86  func (rs *ReferralSets) consumeRefereeJoinedReferralSetEvent(ctx context.Context, e RefereeJoinedReferralSetEvent) error {
    87  	referralSetReferee := entities.ReferralSetRefereeFromProto(e.GetProtoEvent(), rs.vegaTime)
    88  	return rs.store.RefereeJoinedReferralSet(ctx, referralSetReferee)
    89  }
    90  
    91  func (rs *ReferralSets) consumeReferralSetStatsUpdated(ctx context.Context, e ReferralSetStatsUpdatedEvent) error {
    92  	stats, err := entities.ReferralSetStatsFromProto(e.GetProtoEvent(), rs.vegaTime)
    93  	if err != nil {
    94  		return err
    95  	}
    96  	return rs.store.AddReferralSetStats(ctx, stats)
    97  }
    98  
    99  func (rs *ReferralSets) Name() string {
   100  	return "ReferralSets"
   101  }