- 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.
171 lines
4.9 KiB
Go
171 lines
4.9 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
)
|
|
|
|
var (
|
|
ErrWalletIDDuplicate = errors.New("there already exists user id with wallet_type")
|
|
)
|
|
|
|
type Wallet struct {
|
|
ID int64
|
|
Balance Currency
|
|
Currency IntCurrency
|
|
IsWithdraw bool
|
|
IsBettable bool
|
|
IsTransferable bool
|
|
IsActive bool
|
|
UserID int64
|
|
Type WalletType
|
|
UpdatedAt time.Time
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type WalletFilter struct {
|
|
IsActive ValidBool
|
|
Query ValidString
|
|
CreatedBefore ValidTime
|
|
CreatedAfter ValidTime
|
|
}
|
|
|
|
type CustomerWallet struct {
|
|
ID int64
|
|
RegularID int64
|
|
StaticID int64
|
|
CustomerID int64
|
|
}
|
|
type GetCustomerWallet struct {
|
|
ID int64
|
|
RegularID int64
|
|
RegularBalance Currency
|
|
StaticID int64
|
|
StaticBalance Currency
|
|
CustomerID int64
|
|
RegularIsActive bool
|
|
StaticIsActive bool
|
|
RegularUpdatedAt time.Time
|
|
StaticUpdatedAt time.Time
|
|
CreatedAt time.Time
|
|
FirstName string
|
|
LastName string
|
|
PhoneNumber string
|
|
NumberOfTransactions int64
|
|
TotalTransactions Currency
|
|
NumberOfDeposits int64
|
|
TotalDepositsAmount Currency
|
|
NumberOfWithdraws int64
|
|
TotalWithdrawsAmount Currency
|
|
NumberOfTransfers int64
|
|
TotalTransfersAmount Currency
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type BranchWallet struct {
|
|
ID int64
|
|
Balance Currency
|
|
IsActive bool
|
|
Name string
|
|
Location string
|
|
BranchManagerID int64
|
|
CompanyID int64
|
|
IsSelfOwned bool
|
|
UpdatedAt time.Time
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type CreateWallet struct {
|
|
IsWithdraw bool
|
|
IsBettable bool
|
|
IsTransferable bool
|
|
UserID int64
|
|
Type WalletType
|
|
}
|
|
|
|
type CreateCustomerWallet struct {
|
|
CustomerID int64
|
|
RegularWalletID int64
|
|
StaticWalletID int64
|
|
}
|
|
|
|
type WalletType string
|
|
|
|
const (
|
|
RegularWalletType WalletType = "regular_wallet"
|
|
StaticWalletType WalletType = "static_wallet"
|
|
BranchWalletType WalletType = "branch_wallet"
|
|
CompanyWalletType WalletType = "company_wallet"
|
|
)
|
|
|
|
func ConvertDBWallet(wallet dbgen.Wallet) Wallet {
|
|
return Wallet{
|
|
ID: wallet.ID,
|
|
Balance: Currency(wallet.Balance),
|
|
IsWithdraw: wallet.IsWithdraw,
|
|
IsBettable: wallet.IsBettable,
|
|
IsTransferable: wallet.IsTransferable,
|
|
IsActive: wallet.IsActive,
|
|
UserID: wallet.UserID,
|
|
Type: WalletType(wallet.Type),
|
|
UpdatedAt: wallet.UpdatedAt.Time,
|
|
CreatedAt: wallet.CreatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertCreateWallet(wallet CreateWallet) dbgen.CreateWalletParams {
|
|
return dbgen.CreateWalletParams{
|
|
IsWithdraw: wallet.IsWithdraw,
|
|
IsBettable: wallet.IsBettable,
|
|
IsTransferable: wallet.IsTransferable,
|
|
UserID: wallet.UserID,
|
|
Type: string(wallet.Type),
|
|
}
|
|
}
|
|
|
|
func ConvertDBCustomerWallet(customerWallet dbgen.CustomerWallet) CustomerWallet {
|
|
return CustomerWallet{
|
|
ID: customerWallet.ID,
|
|
RegularID: customerWallet.RegularWalletID,
|
|
StaticID: customerWallet.StaticWalletID,
|
|
CustomerID: customerWallet.CustomerID,
|
|
}
|
|
}
|
|
func ConvertCreateCustomerWallet(customerWallet CreateCustomerWallet) dbgen.CreateCustomerWalletParams {
|
|
return dbgen.CreateCustomerWalletParams{
|
|
CustomerID: customerWallet.CustomerID,
|
|
RegularWalletID: customerWallet.RegularWalletID,
|
|
StaticWalletID: customerWallet.StaticWalletID,
|
|
}
|
|
}
|
|
|
|
func ConvertDBGetCustomerWallet(customerWallet dbgen.CustomerWalletDetail) GetCustomerWallet {
|
|
return GetCustomerWallet{
|
|
ID: customerWallet.ID,
|
|
RegularID: customerWallet.RegularID,
|
|
RegularBalance: Currency(customerWallet.RegularBalance),
|
|
StaticID: customerWallet.StaticID,
|
|
StaticBalance: Currency(customerWallet.StaticBalance),
|
|
CustomerID: customerWallet.CustomerID,
|
|
RegularIsActive: customerWallet.RegularIsActive,
|
|
StaticIsActive: customerWallet.StaticIsActive,
|
|
RegularUpdatedAt: customerWallet.RegularUpdatedAt.Time,
|
|
StaticUpdatedAt: customerWallet.StaticUpdatedAt.Time,
|
|
CreatedAt: customerWallet.CreatedAt.Time,
|
|
FirstName: customerWallet.FirstName,
|
|
LastName: customerWallet.LastName,
|
|
PhoneNumber: customerWallet.PhoneNumber.String,
|
|
NumberOfTransactions: customerWallet.NumberOfTransactions,
|
|
TotalTransactions: Currency(customerWallet.TotalTransactions),
|
|
NumberOfDeposits: customerWallet.NumberOfDeposits,
|
|
TotalDepositsAmount: Currency(customerWallet.TotalDepositsAmount),
|
|
NumberOfWithdraws: customerWallet.NumberOfWithdraws,
|
|
TotalWithdrawsAmount: Currency(customerWallet.TotalWithdrawsAmount),
|
|
NumberOfTransfers: customerWallet.NumberOfTransfers,
|
|
TotalTransfersAmount: Currency(customerWallet.TotalTransfersAmount),
|
|
UpdatedAt: customerWallet.StatsUpdatedAt.Time,
|
|
}
|
|
}
|