124 lines
3.3 KiB
Go
124 lines
3.3 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) 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)
|
|
}
|