From 89d9f72ab4c5cf4877bfb4d4ecf5e714d2cdcbb4 Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Wed, 9 Oct 2024 09:27:08 +0330 Subject: [PATCH] Update leaderboard apis --- internal/handlers/vault_handler.go | 15 +++++++++++---- internal/models/vault.go | 7 ++++--- internal/models/vault_resp.go | 2 ++ internal/services/vault_service.go | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/internal/handlers/vault_handler.go b/internal/handlers/vault_handler.go index 51a6246..155a2d3 100644 --- a/internal/handlers/vault_handler.go +++ b/internal/handlers/vault_handler.go @@ -71,6 +71,8 @@ func (a *Api) getVaultHandler(c *gin.Context) { TotalPoints: vault.TotalPoints, JoinAirdrop: vault.JoinAirdrop, Rank: vault.Rank, + Balance: vault.Balance, + RegisteredAt: vault.Model.CreatedAt.UTC().Unix(), Coins: []models.ChainCoins{}, } for _, coin := range coins { @@ -126,6 +128,9 @@ func (a *Api) getVaultByUIDHandler(c *gin.Context) { PublicKeyEDDSA: "", TotalPoints: vault.TotalPoints, JoinAirdrop: vault.JoinAirdrop, + Balance: vault.Balance, + Rank: vault.Rank, + RegisteredAt: vault.Model.CreatedAt.UTC().Unix(), Coins: []models.ChainCoins{}, } for i, _ := range coins { @@ -308,10 +313,12 @@ func (a *Api) getVaultsByRankHandler(c *gin.Context) { } for _, vault := range vaults { vaultResp := models.VaultResponse{ - Name: vault.Alias, - Alias: vault.Alias, - TotalPoints: vault.TotalPoints, - Rank: vault.Rank, + Name: vault.Alias, + Alias: vault.Alias, + TotalPoints: vault.TotalPoints, + Rank: vault.Rank, + Balance: vault.Balance, + RegisteredAt: vault.Model.CreatedAt.UTC().Unix(), } vaultsResp.Vaults = append(vaultsResp.Vaults, vaultResp) } diff --git a/internal/models/vault.go b/internal/models/vault.go index c3b9b1c..e6cab55 100644 --- a/internal/models/vault.go +++ b/internal/models/vault.go @@ -22,9 +22,10 @@ type Vault struct { EDDSA string `gorm:"type:varchar(255);uniqueIndex:ecdsa_eddsa_idx;not null" json:"eddsa" binding:"required"` HexChainCode string `gorm:"type:varchar(255)" json:"hex_chain_code" binding:"required"` Uid string `gorm:"type:varchar(255)" json:"uid" binding:"required"` - TotalPoints float64 `json:"total_points"` // total point of the vault - JoinAirdrop bool `json:"join_airdrop"` // join airdrop or not - Rank int64 `json:"rank"` // rank of the vault + TotalPoints float64 `json:"total_points"` // total point of the vault + JoinAirdrop bool `json:"join_airdrop"` // join airdrop or not + Rank int64 `json:"rank"` // rank of the vault + Balance int64 `gorm:"type:bigint;default:0" json:"balance"` // latest balance of the vault } func (*Vault) TableName() string { diff --git a/internal/models/vault_resp.go b/internal/models/vault_resp.go index 461c7d8..f82dc83 100644 --- a/internal/models/vault_resp.go +++ b/internal/models/vault_resp.go @@ -10,7 +10,9 @@ type VaultResponse struct { TotalPoints float64 `json:"total_points"` JoinAirdrop bool `json:"join_airdrop"` Rank int64 `json:"rank"` + Balance int64 `json:"balance"` Coins []ChainCoins `json:"chains"` + RegisteredAt int64 `json:"registered_at"` } type VaultsResponse struct { diff --git a/internal/services/vault_service.go b/internal/services/vault_service.go index 654e1a5..4195ac2 100644 --- a/internal/services/vault_service.go +++ b/internal/services/vault_service.go @@ -74,7 +74,7 @@ func (s *Storage) GetLeaderVaults(fromRank int64, limit int) ([]models.Vault, er func (s *Storage) GetLeaderVaultCount() (int64, error) { var count int64 - if err := s.db.Model(&models.Vault{}).Where("`rank` is not null").Count(&count).Error; err != nil { + if err := s.db.Model(&models.Vault{}).Where("`rank` is not null and `rank` > 0").Count(&count).Error; err != nil { return 0, fmt.Errorf("failed to get leader vault count: %w", err) } return count, nil