/
repository.go
103 lines (95 loc) · 3.16 KB
/
repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package block
import (
"github.com/MinterTeam/minter-explorer-extender/v2/models"
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
)
type Repository struct {
db *pg.DB
}
func NewRepository(db *pg.DB) *Repository {
orm.RegisterTable((*models.BlockValidator)(nil))
return &Repository{
db: db,
}
}
func (r *Repository) Save(block *models.Block) error {
_, err := r.db.Model(block).Insert()
if err != nil {
return err
}
return nil
}
func (r *Repository) GetLastFromDB() (*models.Block, error) {
block := new(models.Block)
err := r.db.Model(block).Last()
if err != nil {
return nil, err
}
return block, nil
}
func (r *Repository) GetById(id uint64) (*models.Block, error) {
block := new(models.Block)
err := r.db.Model(block).Where("id = ?", id).Select()
if err != nil {
return nil, err
}
return block, nil
}
func (r *Repository) LinkWithValidators(links []*models.BlockValidator) error {
_, err := r.db.Model(&links).Insert()
return err
}
func (r *Repository) DeleteLastBlockData() error {
tx, err := r.db.Begin()
if err != nil {
return err
}
// Rollback tx on error.
defer tx.Rollback()
_, err = tx.Query(nil, `delete from transaction_outputs where transaction_id IN (select distinct id from transactions where block_id = (select id from blocks order by id desc limit 1));`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from transaction_validator where transaction_id IN (select distinct id from transactions where block_id = (select id from blocks order by id desc limit 1));`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from index_transaction_by_address where transaction_id in (select distinct id from transactions where block_id = (select id from blocks order by id desc limit 1));`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from invalid_transactions where block_id = (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from transactions where block_id = (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from slashes where block_id = (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from address_liquidity_pools where liquidity_pool_id in (select id from liquidity_pools where token_id in (select id from coins where created_at_block_id >= (select id from blocks order by id desc limit 1)));`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from liquidity_pools where token_id in (select id from coins where created_at_block_id >= (select id from blocks order by id desc limit 1));`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from coins where created_at_block_id >= (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from block_validator where block_id = (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
_, err = tx.Query(nil, `delete from blocks where id = (select id from blocks order by id desc limit 1);`)
if err != nil {
return err
}
return tx.Commit()
}