2022-11-23 04:06:29 -08:00
|
|
|
// Package governor handle the request of governor data from governor endpoint defined in the api.
|
2022-11-17 07:37:29 -08:00
|
|
|
package governor
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/certusone/wormhole/node/pkg/vaa"
|
2022-11-23 04:06:29 -08:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/internal/pagination"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/response"
|
2022-11-17 07:37:29 -08:00
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Service struct {
|
|
|
|
repo *Repository
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewService create a new governor.Service.
|
|
|
|
func NewService(dao *Repository, logger *zap.Logger) *Service {
|
|
|
|
return &Service{repo: dao, logger: logger.With(zap.String("module", "GovernorService"))}
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindGovernorConfig get a list of governor configurations.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) FindGovernorConfig(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*GovConfig], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryGovernor().SetPagination(p)
|
|
|
|
govConfigs, err := s.repo.FindGovConfigurations(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*GovConfig]{Data: govConfigs}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindGovernorConfigByGuardianAddress get a governor configuration by guardianAddress.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) FindGovernorConfigByGuardianAddress(ctx context.Context, guardianAddress string, p *pagination.Pagination) (*response.Response[*GovConfig], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
query := QueryGovernor().SetID(guardianAddress).SetPagination(p)
|
|
|
|
govConfig, err := s.repo.FindGovConfiguration(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[*GovConfig]{Data: govConfig}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindGovernorStatus get a list of governor status.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) FindGovernorStatus(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*GovStatus], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryGovernor().SetPagination(p)
|
|
|
|
govStatus, err := s.repo.FindGovernorStatus(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*GovStatus]{Data: govStatus}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindGovernorStatusByGuardianAddress get a governor status by guardianAddress.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) FindGovernorStatusByGuardianAddress(ctx context.Context, guardianAddress string, p *pagination.Pagination) (*response.Response[*GovStatus], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
query := QueryGovernor().SetID(guardianAddress).SetPagination(p)
|
|
|
|
govStatus, err := s.repo.FindOneGovernorStatus(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[*GovStatus]{Data: govStatus}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindNotionalLimit get a notional limit for each chainID.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) FindNotionalLimit(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*NotionalLimit], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryNotionalLimit().SetPagination(p)
|
|
|
|
notionalLimit, err := s.repo.FindNotionalLimit(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*NotionalLimit]{Data: notionalLimit}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetNotionalLimitByChainID get a notional limit by chainID.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) GetNotionalLimitByChainID(ctx context.Context, p *pagination.Pagination, chainID vaa.ChainID) (*response.Response[[]*NotionalLimitDetail], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
query := QueryNotionalLimit().SetPagination(p).SetChain(chainID)
|
|
|
|
notionalLimit, err := s.repo.GetNotionalLimitByChainID(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*NotionalLimitDetail]{Data: notionalLimit}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetAvailableNotional get a available notional for each chainID.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) GetAvailableNotional(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*NotionalAvailable], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryNotionalLimit().SetPagination(p)
|
|
|
|
notionalAvailability, err := s.repo.GetAvailableNotional(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*NotionalAvailable]{Data: notionalAvailability}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetAvailableNotionalByChainID get a available notional by chainID.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) GetAvailableNotionalByChainID(ctx context.Context, p *pagination.Pagination, chainID vaa.ChainID) (*response.Response[[]*NotionalAvailableDetail], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
query := QueryNotionalLimit().SetPagination(p).SetChain(chainID)
|
|
|
|
notionaLAvailability, err := s.repo.GetAvailableNotionalByChainID(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*NotionalAvailableDetail]{Data: notionaLAvailability}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetMaxNotionalAvailableByChainID get a maximun notional value by chainID.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) GetMaxNotionalAvailableByChainID(ctx context.Context, p *pagination.Pagination, chainID vaa.ChainID) (*response.Response[*MaxNotionalAvailableRecord], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
query := QueryNotionalLimit().SetPagination(p).SetChain(chainID)
|
|
|
|
maxNotionaLAvailable, err := s.repo.GetMaxNotionalAvailableByChainID(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[*MaxNotionalAvailableRecord]{Data: maxNotionaLAvailable}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// GetEnqueueVaas get all the enqueued vaa.
|
|
|
|
func (s *Service) GetEnqueueVass(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*EnqueuedVaas], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryEnqueuedVaa().SetPagination(p)
|
|
|
|
enqueuedVaaResponse, err := s.repo.GetEnqueueVass(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*EnqueuedVaas]{Data: enqueuedVaaResponse}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// GetEnqueueVassByChainID get enequeued vaa by chainID.
|
|
|
|
func (s *Service) GetEnqueueVassByChainID(ctx context.Context, p *pagination.Pagination, chainID vaa.ChainID) (*response.Response[[]*EnqueuedVaaDetail], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryEnqueuedVaa().SetPagination(p).SetChain(chainID)
|
|
|
|
enqueuedVaaRecord, err := s.repo.GetEnqueueVassByChainID(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*EnqueuedVaaDetail]{Data: enqueuedVaaRecord}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetGovernorLimit get governor limit.
|
2022-11-23 04:06:29 -08:00
|
|
|
func (s *Service) GetGovernorLimit(ctx context.Context, p *pagination.Pagination) (*response.Response[[]*GovernorLimit], error) {
|
2022-11-17 07:37:29 -08:00
|
|
|
if p == nil {
|
|
|
|
p = pagination.FirstPage()
|
|
|
|
}
|
|
|
|
query := QueryGovernor().SetPagination(p)
|
|
|
|
governorLimit, err := s.repo.GetGovernorLimit(ctx, query)
|
2022-11-23 04:06:29 -08:00
|
|
|
res := response.Response[[]*GovernorLimit]{Data: governorLimit}
|
2022-11-17 07:37:29 -08:00
|
|
|
return &res, err
|
|
|
|
}
|