- 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.
109 lines
3.5 KiB
Go
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
|
|
}
|
|
|
|
|