diff --git a/pkg/transformers/test_data/mocks/vat_move/converter.go b/pkg/transformers/test_data/mocks/vat_move/converter.go index b11d1830..6650e9ed 100644 --- a/pkg/transformers/test_data/mocks/vat_move/converter.go +++ b/pkg/transformers/test_data/mocks/vat_move/converter.go @@ -17,7 +17,6 @@ package vat_move import ( "github.com/ethereum/go-ethereum/core/types" "github.com/vulcanize/vulcanizedb/pkg/transformers/test_data" - "github.com/vulcanize/vulcanizedb/pkg/transformers/vat_move" ) type MockVatMoveConverter struct { @@ -25,9 +24,9 @@ type MockVatMoveConverter struct { PassedLogs []types.Log } -func (converter *MockVatMoveConverter) ToModels(ethLogs []types.Log) ([]vat_move.VatMoveModel, error) { +func (converter *MockVatMoveConverter) ToModels(ethLogs []types.Log) ([]interface{}, error) { converter.PassedLogs = ethLogs - return []vat_move.VatMoveModel{test_data.VatMoveModel}, converter.converterError + return []interface{}{test_data.VatMoveModel}, converter.converterError } func (converter *MockVatMoveConverter) SetConverterError(e error) { diff --git a/pkg/transformers/test_data/mocks/vat_move/repository.go b/pkg/transformers/test_data/mocks/vat_move/repository.go index 20d578e7..3b40753f 100644 --- a/pkg/transformers/test_data/mocks/vat_move/repository.go +++ b/pkg/transformers/test_data/mocks/vat_move/repository.go @@ -16,7 +16,7 @@ package vat_move import ( "github.com/vulcanize/vulcanizedb/pkg/core" - "github.com/vulcanize/vulcanizedb/pkg/transformers/vat_move" + "github.com/vulcanize/vulcanizedb/pkg/datastore/postgres" ) type MockVatMoveRepository struct { @@ -26,12 +26,12 @@ type MockVatMoveRepository struct { PassedStartingBlockNumber int64 PassedEndingBlockNumber int64 PassedHeaderID int64 - PassedModels []vat_move.VatMoveModel + PassedModels []interface{} CheckedHeaderIDs []int64 CheckedHeaderError error } -func (repository *MockVatMoveRepository) Create(headerID int64, models []vat_move.VatMoveModel) error { +func (repository *MockVatMoveRepository) Create(headerID int64, models []interface{}) error { repository.PassedHeaderID = headerID repository.PassedModels = models return repository.createError @@ -63,3 +63,7 @@ func (repository *MockVatMoveRepository) MarkHeaderChecked(headerId int64) error func (repository *MockVatMoveRepository) SetCheckedHeaderError(e error) { repository.CheckedHeaderError = e } + +func (repository *MockVatMoveRepository) SetDB(db *postgres.DB) { + // TODO Implement passed DB +} \ No newline at end of file diff --git a/pkg/transformers/transformers.go b/pkg/transformers/transformers.go index 3e404697..313b7bdf 100644 --- a/pkg/transformers/transformers.go +++ b/pkg/transformers/transformers.go @@ -27,6 +27,7 @@ import ( ilk2 "github.com/vulcanize/vulcanizedb/pkg/transformers/drip_file/ilk" "github.com/vulcanize/vulcanizedb/pkg/transformers/drip_file/repo" "github.com/vulcanize/vulcanizedb/pkg/transformers/drip_file/vow" + "github.com/vulcanize/vulcanizedb/pkg/transformers/factories" "github.com/vulcanize/vulcanizedb/pkg/transformers/flip_kick" "github.com/vulcanize/vulcanizedb/pkg/transformers/flop_kick" "github.com/vulcanize/vulcanizedb/pkg/transformers/frob" @@ -72,7 +73,12 @@ var ( TendTransformerInitializer = tend.TendTransformerInitializer{Config: tend.TendConfig}.NewTendTransformer VatGrabTransformerInitializer = vat_grab.VatGrabTransformerInitializer{Config: vat_grab.VatGrabConfig}.NewVatGrabTransformer VatInitTransformerInitializer = vat_init.VatInitTransformerInitializer{Config: vat_init.VatInitConfig}.NewVatInitTransformer - VatMoveTransformerInitializer = vat_move.VatMoveTransformerInitializer{Config: vat_move.VatMoveConfig}.NewVatMoveTransformer + VatMoveTransformerInitializer = factories.Transformer{ + Config: vat_move.VatMoveConfig, + Converter: &vat_move.VatMoveConverter{}, + Repository: &vat_move.VatMoveRepository{}, + Fetcher: &shared.Fetcher{}, + }.NewTransformer VatHealTransformerInitializer = vat_heal.VatHealTransformerInitializer{Config: vat_heal.VatHealConfig}.NewVatHealTransformer VatFoldTransformerInitializer = vat_fold.VatFoldTransformerInitializer{Config: vat_fold.VatFoldConfig}.NewVatFoldTransformer VatSlipTransformerInitializer = vat_slip.VatSlipTransformerInitializer{Config: vat_slip.VatSlipConfig}.NewVatSlipTransformer diff --git a/pkg/transformers/vat_move/repository.go b/pkg/transformers/vat_move/repository.go index 821c36d5..527936ab 100644 --- a/pkg/transformers/vat_move/repository.go +++ b/pkg/transformers/vat_move/repository.go @@ -19,29 +19,19 @@ import ( "github.com/vulcanize/vulcanizedb/pkg/datastore/postgres" ) -type Repository interface { - Create(headerID int64, models []VatMoveModel) error - MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) - MarkHeaderChecked(headerID int64) error -} - type VatMoveRepository struct { - db *postgres.DB + DB *postgres.DB } -func NewVatMoveRepository(db *postgres.DB) VatMoveRepository { - return VatMoveRepository{ - db: db, - } -} - -func (repository VatMoveRepository) Create(headerID int64, models []VatMoveModel) error { - tx, err := repository.db.Begin() +func (repository VatMoveRepository) Create(headerID int64, models []interface{}) error { + tx, err := repository.DB.Begin() if err != nil { return err } - for _, vatMove := range models { + var vatMove VatMoveModel + for _, model := range models { + vatMove = model.(VatMoveModel) _, err = tx.Exec( `INSERT INTO maker.vat_move (header_id, src, dst, rad, tx_idx, raw_log) VALUES ($1, $2, $3, $4::NUMERIC, $5, $6)`, @@ -71,7 +61,7 @@ func (repository VatMoveRepository) Create(headerID int64, models []VatMoveModel func (repository VatMoveRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) { var result []core.Header - err := repository.db.Select( + err := repository.DB.Select( &result, `SELECT headers.id, headers.block_number FROM headers LEFT JOIN checked_headers on headers.id = header_id @@ -81,16 +71,20 @@ func (repository VatMoveRepository) MissingHeaders(startingBlockNumber, endingBl AND headers.eth_node_fingerprint = $3`, startingBlockNumber, endingBlockNumber, - repository.db.Node.ID, + repository.DB.Node.ID, ) return result, err } func (repository VatMoveRepository) MarkHeaderChecked(headerID int64) error { - _, err := repository.db.Exec(`INSERT INTO public.checked_headers (header_id, vat_move_checked) + _, err := repository.DB.Exec(`INSERT INTO public.checked_headers (header_id, vat_move_checked) VALUES ($1, $2) ON CONFLICT (header_id) DO UPDATE SET vat_move_checked = $2`, headerID, true) return err } + +func (repository *VatMoveRepository) SetDB(db *postgres.DB) { + repository.DB = db +} diff --git a/pkg/transformers/vat_move/transformer.go b/pkg/transformers/vat_move/transformer.go deleted file mode 100644 index 5318143c..00000000 --- a/pkg/transformers/vat_move/transformer.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2018 Vulcanize -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package vat_move - -import ( - "log" - - "github.com/ethereum/go-ethereum/common" - - "github.com/vulcanize/vulcanizedb/pkg/core" - "github.com/vulcanize/vulcanizedb/pkg/datastore/postgres" - "github.com/vulcanize/vulcanizedb/pkg/transformers/shared" -) - -type VatMoveTransformerInitializer struct { - Config shared.TransformerConfig -} - -func (initializer VatMoveTransformerInitializer) NewVatMoveTransformer(db *postgres.DB, blockChain core.BlockChain) shared.Transformer { - converter := VatMoveConverter{} - fetcher := shared.NewFetcher(blockChain) - repository := NewVatMoveRepository(db) - return VatMoveTransformer{ - Config: initializer.Config, - Converter: converter, - Fetcher: fetcher, - Repository: repository, - } -} - -type VatMoveTransformer struct { - Config shared.TransformerConfig - Converter Converter - Fetcher shared.LogFetcher - Repository Repository -} - -func (transformer VatMoveTransformer) Execute() error { - missingHeaders, err := transformer.Repository.MissingHeaders(transformer.Config.StartingBlockNumber, transformer.Config.EndingBlockNumber) - if err != nil { - return err - } - - log.Printf("Fetching vat move event logs for %d headers \n", len(missingHeaders)) - for _, header := range missingHeaders { - topics := [][]common.Hash{{common.HexToHash(shared.VatMoveSignature)}} - matchingLogs, err := transformer.Fetcher.FetchLogs(VatMoveConfig.ContractAddresses, topics, header.BlockNumber) - if err != nil { - return err - } - - if len(matchingLogs) < 1 { - err := transformer.Repository.MarkHeaderChecked(header.Id) - if err != nil { - return err - } - continue - } - - models, err := transformer.Converter.ToModels(matchingLogs) - if err != nil { - return err - } - - err = transformer.Repository.Create(header.Id, models) - if err != nil { - return err - } - } - return nil -}