code.vegaprotocol.io/vega@v0.79.0/datanode/sqlsubscribers/game_scores.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 "github.com/pkg/errors" 26 ) 27 28 type GameScoreEvent interface { 29 events.Event 30 GameScoreEvent() eventspb.GameScores 31 } 32 33 type GameScoreStore interface { 34 AddTeamScore(context.Context, entities.GameTeamScore) error 35 AddPartyScore(context.Context, entities.GamePartyScore) error 36 } 37 38 type GameScore struct { 39 subscriber 40 store GameScoreStore 41 } 42 43 func NewGameScore(store GameScoreStore) *GameScore { 44 t := &GameScore{ 45 store: store, 46 } 47 return t 48 } 49 50 func (gs *GameScore) Types() []events.Type { 51 return []events.Type{events.GameScoresEvent} 52 } 53 54 func (gs *GameScore) Push(ctx context.Context, evt events.Event) error { 55 return gs.consume(ctx, evt.(GameScoreEvent)) 56 } 57 58 func (gs *GameScore) consume(ctx context.Context, event GameScoreEvent) error { 59 gameScoresEvents := event.GameScoreEvent() 60 teamScores, partyScores, err := entities.GameScoresFromProto(&gameScoresEvents, entities.TxHash(event.TxHash()), gs.vegaTime, event.Sequence()) 61 if err != nil { 62 return errors.Wrap(err, "unable to parse game scores") 63 } 64 65 for _, ts := range teamScores { 66 if err := gs.store.AddTeamScore(ctx, ts); err != nil { 67 return errors.Wrap(err, "error adding team score") 68 } 69 } 70 for _, ps := range partyScores { 71 if err := gs.store.AddPartyScore(ctx, ps); err != nil { 72 return errors.Wrap(err, "error adding party score") 73 } 74 } 75 return nil 76 } 77 78 func (gs *GameScore) Name() string { 79 return "GameScore" 80 }