- 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.
115 lines
4.1 KiB
Go
115 lines
4.1 KiB
Go
package domain
|
|
|
|
import (
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"time"
|
|
)
|
|
|
|
type CompanyStat struct {
|
|
IntervalStart time.Time
|
|
CompanyID int64
|
|
CompanyName string
|
|
CompanySlug string
|
|
TotalBets int64
|
|
TotalStake Currency
|
|
DeductedStake Currency
|
|
TotalCashOut Currency
|
|
TotalCashBacks Currency
|
|
NumberOfUnsettled int64
|
|
TotalUnsettledAmount Currency
|
|
TotalAdmins int64
|
|
TotalManagers int64
|
|
TotalCashiers int64
|
|
TotalCustomers int64
|
|
TotalApprovers int64
|
|
TotalBranches int64
|
|
UpdatedAt time.Time
|
|
}
|
|
type CompanyStatRes struct {
|
|
IntervalStart time.Time `json:"interval_start"`
|
|
CompanyID int64 `json:"company_id"`
|
|
CompanyName string `json:"company_name"`
|
|
CompanySlug string `json:"company_slug"`
|
|
TotalBets int64 `json:"total_bets"`
|
|
TotalStake float32 `json:"total_stake"`
|
|
DeductedStake float32 `json:"deducted_stake"`
|
|
TotalCashOut float32 `json:"total_cash_out"`
|
|
TotalCashBacks float32 `json:"total_cash_backs"`
|
|
NumberOfUnsettled int64 `json:"number_of_unsettled"`
|
|
TotalUnsettledAmount float32 `json:"total_unsettled_amount"`
|
|
TotalAdmins int64 `json:"total_admins"`
|
|
TotalManagers int64 `json:"total_managers"`
|
|
TotalCashiers int64 `json:"total_cashiers"`
|
|
TotalCustomers int64 `json:"total_customers"`
|
|
TotalApprovers int64 `json:"total_approvers"`
|
|
TotalBranches int64 `json:"total_branches"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type CompanyStatFilter struct {
|
|
Interval ValidDateInterval
|
|
CompanyID ValidInt64
|
|
}
|
|
|
|
func ConvertDBCompanyStats(company dbgen.CompanyStat) CompanyStat {
|
|
return CompanyStat{
|
|
IntervalStart: company.IntervalStart.Time,
|
|
CompanyID: company.CompanyID,
|
|
CompanyName: company.CompanyName,
|
|
CompanySlug: company.CompanySlug,
|
|
TotalBets: company.TotalBets,
|
|
TotalStake: Currency(company.TotalStake),
|
|
DeductedStake: Currency(company.DeductedStake),
|
|
TotalCashOut: Currency(company.TotalCashOut),
|
|
TotalCashBacks: Currency(company.TotalCashBacks),
|
|
NumberOfUnsettled: company.NumberOfUnsettled,
|
|
TotalUnsettledAmount: Currency(company.TotalUnsettledAmount),
|
|
TotalAdmins: company.TotalAdmins,
|
|
TotalManagers: company.TotalManagers,
|
|
TotalCashiers: company.TotalCashiers,
|
|
TotalCustomers: company.TotalCustomers,
|
|
TotalApprovers: company.TotalApprovers,
|
|
TotalBranches: company.TotalBranches,
|
|
UpdatedAt: company.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertDBCompanyStatsList(stats []dbgen.CompanyStat) []CompanyStat {
|
|
result := make([]CompanyStat, len(stats))
|
|
for i, stat := range stats {
|
|
result[i] = ConvertDBCompanyStats(stat)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func ConvertDBCompanyStatsByInterval(company dbgen.GetCompanyStatsRow) CompanyStat {
|
|
return CompanyStat{
|
|
IntervalStart: company.IntervalStart.Time,
|
|
CompanyID: company.CompanyID,
|
|
CompanyName: company.CompanyName,
|
|
CompanySlug: company.CompanySlug,
|
|
TotalBets: company.TotalBets,
|
|
TotalStake: Currency(company.TotalStake),
|
|
DeductedStake: Currency(company.DeductedStake),
|
|
TotalCashOut: Currency(company.TotalCashOut),
|
|
TotalCashBacks: Currency(company.TotalCashBacks),
|
|
NumberOfUnsettled: company.NumberOfUnsettled,
|
|
TotalUnsettledAmount: Currency(company.TotalUnsettledAmount),
|
|
TotalAdmins: company.TotalAdmins,
|
|
TotalManagers: company.TotalManagers,
|
|
TotalCashiers: company.TotalCashiers,
|
|
TotalCustomers: company.TotalCustomers,
|
|
TotalApprovers: company.TotalApprovers,
|
|
TotalBranches: company.TotalBranches,
|
|
UpdatedAt: company.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertDBCompanyStatsByIntervalList(stats []dbgen.GetCompanyStatsRow) []CompanyStat {
|
|
result := make([]CompanyStat, len(stats))
|
|
for i, stat := range stats {
|
|
result[i] = ConvertDBCompanyStatsByInterval(stat)
|
|
}
|
|
return result
|
|
}
|