Yimaru-BackEnd/internal/domain/wallet_stats.go
Samuel Tariku 485cba3c9c feat: Add new stat stores and reporting functionalities for bets, branches, and wallets
- Introduced BetStatStore, BranchStatStore, and WalletStatStore interfaces for handling statistics.
- Implemented repository methods for fetching and updating bet, branch, and wallet statistics.
- Created reporting services for generating interval reports for bets, branches, companies, and wallets.
- Enhanced CSV writing functionality to support dynamic struct to CSV conversion.
- Added cron jobs for periodic updates of branch and wallet statistics.
- Updated wallet handler to include transaction statistics in the response.
2025-10-29 07:14:38 +03:00

109 lines
3.5 KiB
Go

package domain
import (
"time"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
)
type WalletStat struct {
IntervalStart time.Time
WalletID int64
WalletUserID int64
WalletUserFirstName string
WalletUserLastName string
WalletType string
NumberOfTransactions int64
TotalTransactions Currency
NumberOfDeposits int64
TotalDepositsAmount Currency
NumberOfWithdraws int64
TotalWithdrawsAmount Currency
NumberOfTransfers int64
TotalTransfersAmount Currency
UpdatedAt time.Time
}
type WalletStatRes struct {
IntervalStart time.Time `json:"interval_start"`
WalletID int64 `json:"wallet_id"`
WalletUserID int64 `json:"wallet_user_id"`
WalletUserFirstName string `json:"wallet_user_first_name"`
WalletUserLastName string `json:"wallet_user_last_name"`
WalletType string `json:"wallet_type"`
NumberOfTransactions int64 `json:"number_of_transactions"`
TotalTransactions float32 `json:"total_transactions"`
NumberOfDeposits int64 `json:"number_of_deposits"`
TotalDepositsAmount float32 `json:"total_deposits_amount"`
NumberOfWithdraws int64 `json:"number_of_withdraws"`
TotalWithdrawsAmount float32 `json:"total_withdraws_amount"`
NumberOfTransfers int64 `json:"number_of_transfers"`
TotalTransfersAmount float32 `json:"total_transfers_amount"`
UpdatedAt time.Time `json:"updated_at"`
}
type WalletStatFilter struct {
Interval ValidDateInterval
UserID ValidInt64
}
func ConvertDBWalletStats(stats dbgen.WalletStat) WalletStat {
return WalletStat{
IntervalStart: stats.IntervalStart.Time,
WalletID: stats.WalletID,
WalletUserID: stats.WalletUserID,
WalletUserFirstName: stats.WalletUserFirstName,
WalletUserLastName: stats.WalletUserLastName,
WalletType: stats.WalletType,
NumberOfTransactions: stats.NumberOfTransactions,
TotalTransactions: Currency(stats.TotalTransactions),
NumberOfDeposits: stats.NumberOfDeposits,
TotalDepositsAmount: Currency(stats.TotalDepositsAmount),
NumberOfWithdraws: stats.NumberOfWithdraws,
TotalWithdrawsAmount: Currency(stats.TotalWithdrawsAmount),
NumberOfTransfers: stats.NumberOfTransfers,
TotalTransfersAmount: Currency(stats.TotalTransfersAmount),
UpdatedAt: stats.UpdatedAt.Time,
}
}
func ConvertDBWalletStatsList(stats []dbgen.WalletStat) []WalletStat {
result := make([]WalletStat, len(stats))
for i, stat := range stats {
result[i] = ConvertDBWalletStats(stat)
}
return result
}
func ConvertDBWalletStatsByInterval(stats dbgen.GetWalletStatsRow) WalletStat {
return WalletStat{
IntervalStart: stats.IntervalStart.Time,
WalletID: stats.WalletID,
WalletUserID: stats.WalletUserID,
WalletUserFirstName: stats.WalletUserFirstName,
WalletUserLastName: stats.WalletUserLastName,
WalletType: stats.WalletType,
NumberOfTransactions: stats.NumberOfTransactions,
TotalTransactions: Currency(stats.TotalTransactions),
NumberOfDeposits: stats.NumberOfDeposits,
TotalDepositsAmount: Currency(stats.TotalDepositsAmount),
NumberOfWithdraws: stats.NumberOfWithdraws,
TotalWithdrawsAmount: Currency(stats.TotalWithdrawsAmount),
NumberOfTransfers: stats.NumberOfTransfers,
TotalTransfersAmount: Currency(stats.TotalTransfersAmount),
UpdatedAt: stats.UpdatedAt.Time,
}
}
func ConvertDBWalletStatsByIntervalList(stats []dbgen.GetWalletStatsRow) []WalletStat {
result := make([]WalletStat, len(stats))
for i, stat := range stats {
result[i] = ConvertDBWalletStatsByInterval(stat)
}
return result
}