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 }