code.vegaprotocol.io/vega@v0.79.0/datanode/sqlsubscribers/liquidity_provision.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 "code.vegaprotocol.io/vega/protos/vega" 24 25 "github.com/pkg/errors" 26 ) 27 28 type LiquidityProvisionEvent interface { 29 events.Event 30 LiquidityProvision() *vega.LiquidityProvision 31 } 32 33 type LiquidityProvisionStore interface { 34 Upsert(context.Context, entities.LiquidityProvision) error 35 Flush(ctx context.Context) error 36 } 37 38 type LiquidityProvision struct { 39 subscriber 40 store LiquidityProvisionStore 41 } 42 43 func NewLiquidityProvision(store LiquidityProvisionStore) *LiquidityProvision { 44 return &LiquidityProvision{ 45 store: store, 46 } 47 } 48 49 func (lp *LiquidityProvision) Types() []events.Type { 50 return []events.Type{events.LiquidityProvisionEvent} 51 } 52 53 func (lp *LiquidityProvision) Flush(ctx context.Context) error { 54 err := lp.flush(ctx) 55 if err != nil { 56 return errors.Wrap(err, "flushing liquidity provisions") 57 } 58 59 return nil 60 } 61 62 func (lp *LiquidityProvision) Push(ctx context.Context, evt events.Event) error { 63 return lp.consume(ctx, evt.(LiquidityProvisionEvent)) 64 } 65 66 func (lp *LiquidityProvision) flush(ctx context.Context) error { 67 return errors.Wrap(lp.store.Flush(ctx), "flushing liquidity provisions") 68 } 69 70 func (lp *LiquidityProvision) consume(ctx context.Context, event LiquidityProvisionEvent) error { 71 entity, err := entities.LiquidityProvisionFromProto(event.LiquidityProvision(), entities.TxHash(event.TxHash()), lp.vegaTime) 72 if err != nil { 73 return errors.Wrap(err, "converting liquidity provision event to database entity failed") 74 } 75 76 err = lp.store.Upsert(ctx, entity) 77 return errors.Wrap(err, "adding liquidity provision to store") 78 } 79 80 func (lp *LiquidityProvision) Name() string { 81 return "LiquidityProvision" 82 }