/
context.go
129 lines (111 loc) · 3.21 KB
/
context.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package config
import (
"github.com/baking-bad/bcdhub/internal/cache"
"github.com/baking-bad/bcdhub/internal/models"
"github.com/baking-bad/bcdhub/internal/models/account"
"github.com/baking-bad/bcdhub/internal/models/bigmapaction"
"github.com/baking-bad/bcdhub/internal/models/bigmapdiff"
"github.com/baking-bad/bcdhub/internal/models/block"
"github.com/baking-bad/bcdhub/internal/models/contract"
"github.com/baking-bad/bcdhub/internal/models/domains"
"github.com/baking-bad/bcdhub/internal/models/migration"
"github.com/baking-bad/bcdhub/internal/models/operation"
"github.com/baking-bad/bcdhub/internal/models/protocol"
smartrollup "github.com/baking-bad/bcdhub/internal/models/smart_rollup"
"github.com/baking-bad/bcdhub/internal/models/stats"
"github.com/baking-bad/bcdhub/internal/models/ticket"
"github.com/baking-bad/bcdhub/internal/models/types"
"github.com/baking-bad/bcdhub/internal/noderpc"
"github.com/baking-bad/bcdhub/internal/postgres/core"
"github.com/baking-bad/bcdhub/internal/services/mempool"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
)
// Context -
type Context struct {
Network types.Network
RPC noderpc.INode
Mempool *mempool.Mempool
StorageDB *core.Postgres
Config Config
TzipSchema string
Storage models.GeneralRepository
Accounts account.Repository
BigMapActions bigmapaction.Repository
BigMapDiffs bigmapdiff.Repository
Blocks block.Repository
Contracts contract.Repository
GlobalConstants contract.ConstantRepository
Migrations migration.Repository
Operations operation.Repository
Protocols protocol.Repository
Tickets ticket.Repository
Domains domains.Repository
Scripts contract.ScriptRepository
SmartRollups smartrollup.Repository
Stats stats.Repository
Cache *cache.Cache
}
// NewContext -
func NewContext(network types.Network, opts ...ContextOption) *Context {
ctx := &Context{
Network: network,
}
for _, opt := range opts {
opt(ctx)
}
ctx.Cache = cache.NewCache(
ctx.RPC, ctx.Accounts, ctx.Contracts, ctx.Protocols,
)
return ctx
}
// Close -
func (ctx *Context) Close() error {
if ctx.StorageDB != nil {
if err := ctx.StorageDB.Close(); err != nil {
return err
}
}
return nil
}
// Contexts -
type Contexts map[types.Network]*Context
// NewContext -
func NewContexts(cfg Config, networks []string, opts ...ContextOption) Contexts {
if len(networks) == 0 {
panic("empty networks list in config file")
}
ctxs := make(Contexts)
for i := range networks {
networkType := types.NewNetwork(networks[i])
if networkType == types.Empty {
log.Warn().Str("network", networks[i]).Msg("unknown network")
continue
}
ctxs[networkType] = NewContext(networkType, opts...)
}
return ctxs
}
// Get -
func (ctxs Contexts) Get(network types.Network) (*Context, error) {
if ctx, ok := ctxs[network]; ok {
return ctx, nil
}
return nil, errors.Errorf("unknown network: %s", network.String())
}
// Any -
func (ctxs Contexts) Any() *Context {
for _, ctx := range ctxs {
return ctx
}
panic("empty contexts map")
}
// Close -
func (ctxs Contexts) Close() error {
for _, c := range ctxs {
if err := c.Close(); err != nil {
return err
}
}
return nil
}