- 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.
121 lines
3.2 KiB
Go
121 lines
3.2 KiB
Go
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) GetEventStats(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.eventSvc.GetEventStats(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) GetEventStatsByInterval(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.eventSvc.GetEventStatsByInterval(c.Context(), domain.EventStatsByIntervalFilter{
|
|
Interval: interval,
|
|
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)
|
|
}
|