Yimaru-BackEnd/internal/domain/company_stats.go
Samuel Tariku 0ffba57ec5 feat: Refactor report generation and management
- Removed detailed event routes from the API.
- Added new report request routes for creating and fetching report requests.
- Introduced new domain models for report requests, including metadata and status handling.
- Implemented report request processing logic, including CSV generation for event interval reports.
- Enhanced company statistics handling with new domain models and service methods.
- Updated repository interfaces and implementations to support new report functionalities.
- Added error handling and logging for report file operations and notifications.
2025-10-28 00:51:52 +03:00

106 lines
3.7 KiB
Go

package domain
import (
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
"time"
)
type CompanyStat struct {
CompanyID int64
IntervalStart time.Time
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 {
CompanyID int64 `json:"company_id"`
IntervalStart time.Time `json:"interval_start"`
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{
CompanyID: company.CompanyID,
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{
CompanyID: company.CompanyID,
IntervalStart: company.IntervalStart.Time,
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
}