package handlers import ( "strconv" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response" "github.com/gofiber/fiber/v2" "go.uber.org/zap" ) func (h *Handler) GetTotalEventStats(c *fiber.Ctx) error { leagueIDQuery := c.Query("league_id") var leagueID domain.ValidInt64 if leagueIDQuery != "" { leagueIDInt, err := strconv.ParseInt(leagueIDQuery, 10, 64) if err != nil { h.BadRequestLogger().Error("invalid league id", zap.String("league_id", leagueIDQuery), zap.Error(err), ) return fiber.NewError(fiber.StatusBadRequest, "invalid league id") } leagueID = domain.ValidInt64{ Value: leagueIDInt, Valid: true, } } sportIDQuery := c.Query("sport_id") var sportID domain.ValidInt32 if sportIDQuery != "" { sportIDint, err := strconv.Atoi(sportIDQuery) if err != nil { h.BadRequestLogger().Info("invalid sport id", zap.String("sportID", sportIDQuery), zap.Error(err), ) return fiber.NewError(fiber.StatusBadRequest, "invalid sport id") } sportID = domain.ValidInt32{ Value: int32(sportIDint), Valid: true, } } stats, err := h.statSvc.GetTotalEventStats(c.Context(), domain.EventStatsFilter{ LeagueID: leagueID, SportID: sportID, }) if err != nil { h.InternalServerErrorLogger().Error("Failed to retrieve event status", zap.Error(err), ) return fiber.NewError(fiber.StatusInternalServerError, err.Error()) } return response.WriteJSON(c, fiber.StatusOK, "Event Statistics retrieved successfully", stats, nil) } func (h *Handler) GetTotalEventStatsByInterval(c *fiber.Ctx) error { intervalParam := c.Query("interval", "day") interval, err := domain.ParseDateInterval(intervalParam) if err != nil { h.BadRequestLogger().Error("invalid date interval", zap.String("interval", c.Query("interval", "day")), zap.Error(err), ) return fiber.NewError(fiber.StatusBadRequest, "invalid date interval") } leagueIDQuery := c.Query("league_id") var leagueID domain.ValidInt64 if leagueIDQuery != "" { leagueIDInt, err := strconv.ParseInt(leagueIDQuery, 10, 64) if err != nil { h.BadRequestLogger().Error("invalid league id", zap.String("league_id", leagueIDQuery), zap.Error(err), ) return fiber.NewError(fiber.StatusBadRequest, "invalid league id") } leagueID = domain.ValidInt64{ Value: leagueIDInt, Valid: true, } } sportIDQuery := c.Query("sport_id") var sportID domain.ValidInt32 if sportIDQuery != "" { sportIDint, err := strconv.Atoi(sportIDQuery) if err != nil { h.BadRequestLogger().Info("invalid sport id", zap.String("sportID", sportIDQuery), zap.Error(err), ) return fiber.NewError(fiber.StatusBadRequest, "invalid sport id") } sportID = domain.ValidInt32{ Value: int32(sportIDint), Valid: true, } } stats, err := h.statSvc.GetTotalEventStatsByInterval(c.Context(), domain.EventStatsByIntervalFilter{ Interval: domain.ValidDateInterval{ Value: interval, Valid: true, }, LeagueID: leagueID, SportID: sportID, }) if err != nil { h.InternalServerErrorLogger().Error("Failed to retrieve event status interval", zap.Error(err), ) return fiber.NewError(fiber.StatusInternalServerError, err.Error()) } return response.WriteJSON(c, fiber.StatusOK, "Event Statistics retrieved successfully", stats, nil) }