diff --git a/.golangci.yml b/.golangci.yml index 066edbd..80c1bc0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -42,3 +42,4 @@ linters: - musttag - depguard - ifshort + - ireturn diff --git a/pkg/data/manager.go b/pkg/data/manager.go index a99149b..85af0c6 100644 --- a/pkg/data/manager.go +++ b/pkg/data/manager.go @@ -2,7 +2,7 @@ package data import ( "fmt" - "main/pkg/fetchers/cosmos" + "main/pkg/fetchers" "main/pkg/types" "sync" @@ -26,16 +26,16 @@ func (m *Manager) GetTallies() (map[string]types.ChainTallyInfos, error) { var mutex sync.Mutex errors := make([]error, 0) - tallies := make(map[string]types.ChainTallyInfos, 0) + tallies := make(map[string]types.ChainTallyInfos) for _, chain := range m.Chains { - rpc := cosmos.NewRPC(chain, m.Logger) + fetcher := fetchers.GetFetcher(chain, m.Logger) wg.Add(1) - go func(c *types.Chain, rpc *cosmos.RPC) { + go func(c *types.Chain, fetcher fetchers.Fetcher) { defer wg.Done() - talliesForChain, err := rpc.GetTallies() + talliesForChain, err := fetcher.GetTallies() mutex.Lock() @@ -46,7 +46,7 @@ func (m *Manager) GetTallies() (map[string]types.ChainTallyInfos, error) { tallies[c.Name] = talliesForChain } mutex.Unlock() - }(chain, rpc) + }(chain, fetcher) } wg.Wait() @@ -63,7 +63,7 @@ func (m *Manager) GetParams() (map[string]types.ChainWithVotingParams, error) { var wg sync.WaitGroup var mutex sync.Mutex - params := make(map[string]types.ChainWithVotingParams, 0) + params := make(map[string]types.ChainWithVotingParams) errors := make([]error, 0) for _, chain := range m.Chains { @@ -72,9 +72,9 @@ func (m *Manager) GetParams() (map[string]types.ChainWithVotingParams, error) { go func(chain *types.Chain) { defer wg.Done() - rpc := cosmos.NewRPC(chain, m.Logger) + fetcher := fetchers.GetFetcher(chain, m.Logger) - chainParams, errs := rpc.GetChainParams() + chainParams, errs := fetcher.GetChainParams() mutex.Lock() defer mutex.Unlock() diff --git a/pkg/fetchers/fetcher.go b/pkg/fetchers/fetcher.go new file mode 100644 index 0000000..acf426d --- /dev/null +++ b/pkg/fetchers/fetcher.go @@ -0,0 +1,20 @@ +package fetchers + +import ( + "main/pkg/fetchers/cosmos" + "main/pkg/types" + + "github.com/rs/zerolog" +) + +type Fetcher interface { + GetAllProposals() ([]types.Proposal, *types.QueryError) + GetVote(proposal, voter string) (*types.Vote, *types.QueryError) + GetTallies() (types.ChainTallyInfos, error) + + GetChainParams() (*types.ChainWithVotingParams, []error) +} + +func GetFetcher(chainConfig *types.Chain, logger zerolog.Logger) Fetcher { + return cosmos.NewRPC(chainConfig, logger) +} diff --git a/pkg/state/generator.go b/pkg/state/generator.go index 4e47e1b..365c08e 100644 --- a/pkg/state/generator.go +++ b/pkg/state/generator.go @@ -1,7 +1,7 @@ package state import ( - "main/pkg/fetchers/cosmos" + "main/pkg/fetchers" "main/pkg/types" "sync" @@ -44,9 +44,9 @@ func (g *Generator) ProcessChain( state State, oldState State, ) { - rpc := cosmos.NewRPC(chain, g.Logger) + fetcher := fetchers.GetFetcher(chain, g.Logger) - proposals, err := rpc.GetAllProposals() + proposals, err := fetcher.GetAllProposals() if err != nil { g.Logger.Warn().Err(err).Msg("Error processing proposals") g.Mutex.Lock() @@ -82,7 +82,7 @@ func (g *Generator) ProcessChain( wg.Add(1) go func(p types.Proposal, w *types.Wallet) { - g.ProcessProposalAndWallet(chain, p, rpc, w, state, oldState) + g.ProcessProposalAndWallet(chain, p, fetcher, w, state, oldState) wg.Done() }(proposal, wallet) } @@ -94,13 +94,13 @@ func (g *Generator) ProcessChain( func (g *Generator) ProcessProposalAndWallet( chain *types.Chain, proposal types.Proposal, - rpc *cosmos.RPC, + fetcher fetchers.Fetcher, wallet *types.Wallet, state State, oldState State, ) { oldVote, _, found := oldState.GetVoteAndProposal(chain.Name, proposal.ID, wallet.Address) - vote, err := rpc.GetVote(proposal.ID, wallet.Address) + vote, err := fetcher.GetVote(proposal.ID, wallet.Address) if found && oldVote.HasVoted() && vote == nil { g.Logger.Trace().