Yimaru-BackEnd/internal/domain/event_stats.go
Samuel Tariku 18689ea124 feat: Add EventWithSettings domain model and related conversion functions
- Introduced EventWithSettings and EventWithSettingsRes structs for enhanced event data handling.
- Implemented conversion functions for creating and updating event settings.
- Added support for fetching events with settings from the database.
- Created new report data structures for comprehensive reporting capabilities.
- Implemented event statistics retrieval and filtering by league and sport.
- Added handlers for event statistics endpoints in the web server.
- Introduced DateInterval type for managing time intervals in reports.
2025-10-18 11:50:17 +03:00

126 lines
4.5 KiB
Go

package domain
import (
"time"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
)
type EventStats struct {
EventCount int64 `json:"event_count"`
TotalActiveEvents int64 `json:"total_active_events"`
TotalInActiveEvents int64 `json:"total_inactive_events"`
TotalFeaturedEvents int64 `json:"total_featured_events"`
TotalLeagues int64 `json:"total_leagues"`
Pending int64 `json:"pending"`
InPlay int64 `json:"in_play"`
ToBeFixed int64 `json:"to_be_fixed"`
Ended int64 `json:"ended"`
Postponed int64 `json:"postponed"`
Cancelled int64 `json:"cancelled"`
Walkover int64 `json:"walkover"`
Interrupted int64 `json:"interrupted"`
Abandoned int64 `json:"abandoned"`
Retired int64 `json:"retired"`
Suspended int64 `json:"suspended"`
DecidedByFa int64 `json:"decided_by_fa"`
Removed int64 `json:"removed"`
}
type EventStatsFilter struct {
Interval DateInterval
LeagueID ValidInt64
SportID ValidInt32
}
type EventStatsByIntervalFilter struct {
Interval DateInterval
LeagueID ValidInt64
SportID ValidInt32
}
type EventStatsByInterval struct {
Date time.Time `json:"date"`
EventCount int64 `json:"event_count"`
TotalActiveEvents int64 `json:"total_active_events"`
TotalInActiveEvents int64 `json:"total_inactive_events"`
TotalFeaturedEvents int64 `json:"total_featured_events"`
TotalLeagues int64 `json:"total_leagues"`
Pending int64 `json:"pending"`
InPlay int64 `json:"in_play"`
ToBeFixed int64 `json:"to_be_fixed"`
Ended int64 `json:"ended"`
Postponed int64 `json:"postponed"`
Cancelled int64 `json:"cancelled"`
Walkover int64 `json:"walkover"`
Interrupted int64 `json:"interrupted"`
Abandoned int64 `json:"abandoned"`
Retired int64 `json:"retired"`
Suspended int64 `json:"suspended"`
DecidedByFa int64 `json:"decided_by_fa"`
Removed int64 `json:"removed"`
}
func ConvertDBEventStats(stats dbgen.GetEventStatsRow) EventStats {
return EventStats{
EventCount: stats.EventCount,
TotalActiveEvents: stats.TotalActiveEvents,
TotalInActiveEvents: stats.TotalInactiveEvents,
TotalFeaturedEvents: stats.TotalFeaturedEvents,
TotalLeagues: stats.TotalLeagues,
Pending: stats.Pending,
InPlay: stats.InPlay,
ToBeFixed: stats.ToBeFixed,
Ended: stats.Ended,
Postponed: stats.Postponed,
Cancelled: stats.Cancelled,
Walkover: stats.Walkover,
Interrupted: stats.Interrupted,
Abandoned: stats.Abandoned,
Retired: stats.Retired,
Suspended: stats.Suspended,
DecidedByFa: stats.DecidedByFa,
Removed: stats.Removed,
}
}
func ConvertDBEventStatsByInterval(stats dbgen.GetEventStatsByIntervalRow) EventStatsByInterval {
return EventStatsByInterval{
Date: stats.Date.Time,
EventCount: stats.EventCount,
TotalActiveEvents: stats.TotalActiveEvents,
TotalInActiveEvents: stats.TotalInactiveEvents,
TotalFeaturedEvents: stats.TotalFeaturedEvents,
TotalLeagues: stats.TotalLeagues,
Pending: stats.Pending,
InPlay: stats.InPlay,
ToBeFixed: stats.ToBeFixed,
Ended: stats.Ended,
Postponed: stats.Postponed,
Cancelled: stats.Cancelled,
Walkover: stats.Walkover,
Interrupted: stats.Interrupted,
Abandoned: stats.Abandoned,
Retired: stats.Retired,
Suspended: stats.Suspended,
DecidedByFa: stats.DecidedByFa,
Removed: stats.Removed,
}
}
func ConvertDBEventStatsByIntervalList(stats []dbgen.GetEventStatsByIntervalRow) []EventStatsByInterval {
result := make([]EventStatsByInterval, len(stats))
for i, e := range stats {
result[i] = ConvertDBEventStatsByInterval(e)
}
return result
}
type AggregateEventBetStats struct {
ID int64 `json:"id"`
MatchName string `json:"match_name"`
NumberOfBets int64 `json:"number_of_bets"`
TotalAmount Currency `json:"total_amount"`
AvgBetAmount Currency `json:"avg_bet_amount"`
TotalPotentialWinnings Currency `json:"total_potential_winnings"`
}