207 lines
6.7 KiB
Go
207 lines
6.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"log"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// GetPreMatchOdds godoc
|
|
// @Summary Get pre-match odds for an event
|
|
// @Description Fetches pre-match odds from EnetPulse for a given event
|
|
// @Tags EnetPulse - PreMatch
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param objectFK query int true "Event ID"
|
|
// @Param oddsProviderFK query []int false "Odds provider IDs (comma separated)"
|
|
// @Param outcomeTypeFK query int false "Outcome type ID"
|
|
// @Param outcomeScopeFK query int false "Outcome scope ID"
|
|
// @Param outcomeSubtypeFK query int false "Outcome subtype ID"
|
|
// @Param limit query int false "Limit results"
|
|
// @Param offset query int false "Offset results"
|
|
// @Param languageTypeFK query int false "Language type ID"
|
|
// @Success 200 {object} domain.Response{data=domain.PreMatchOddsResponse}
|
|
// @Failure 400 {object} domain.ErrorResponse
|
|
// @Failure 502 {object} domain.ErrorResponse
|
|
// @Router /api/v1/odds/pre-match [get]
|
|
func (h *Handler) GetPreMatchOdds(c *fiber.Ctx) error {
|
|
// Parse query parameters
|
|
objectFK := c.QueryInt("objectFK")
|
|
if objectFK == 0 {
|
|
return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{
|
|
Message: "Event ID (objectFK) is required",
|
|
Error: "missing or invalid objectFK",
|
|
})
|
|
}
|
|
|
|
params := domain.PreMatchOddsRequest{
|
|
ObjectFK: int64(objectFK),
|
|
OddsProviderFK: intSliceToInt64Slice(parseIntSlice(c.Query("oddsProviderFK"))), // convert []int to []int64
|
|
OutcomeTypeFK: int64(c.QueryInt("outcomeTypeFK")),
|
|
OutcomeScopeFK: int64(c.QueryInt("outcomeScopeFK")),
|
|
OutcomeSubtypeFK: int64(c.QueryInt("outcomeSubtypeFK")),
|
|
Limit: c.QueryInt("limit"),
|
|
Offset: c.QueryInt("offset"),
|
|
LanguageTypeFK: int64(c.QueryInt("languageTypeFK")),
|
|
}
|
|
|
|
// Call service
|
|
res, err := h.enetPulseSvc.FetchPreMatchOdds(c.Context(), params)
|
|
if err != nil {
|
|
log.Println("FetchPreMatchOdds error:", err)
|
|
return c.Status(fiber.StatusBadGateway).JSON(domain.ErrorResponse{
|
|
Message: "Failed to fetch pre-match odds",
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Pre-match odds fetched successfully",
|
|
Data: res,
|
|
StatusCode: fiber.StatusOK,
|
|
Success: true,
|
|
})
|
|
}
|
|
|
|
// GetAllSports godoc
|
|
// @Summary Get all sports
|
|
// @Description Fetches all sports stored in the database
|
|
// @Tags EnetPulse - Sports
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response{data=[]domain.EnetpulseSport}
|
|
// @Failure 502 {object} domain.ErrorResponse
|
|
// @Router /api/v1/enetpulse/sports [get]
|
|
func (h *Handler) GetAllSports(c *fiber.Ctx) error {
|
|
// Call service
|
|
sports, err := h.enetPulseSvc.GetAllSports(c.Context())
|
|
if err != nil {
|
|
log.Println("GetAllSports error:", err)
|
|
return c.Status(fiber.StatusBadGateway).JSON(domain.ErrorResponse{
|
|
Message: "Failed to fetch sports",
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Sports fetched successfully",
|
|
Data: sports,
|
|
StatusCode: fiber.StatusOK,
|
|
Success: true,
|
|
})
|
|
}
|
|
|
|
// GetAllTournamentTemplates godoc
|
|
// @Summary Get all tournament templates
|
|
// @Description Fetches all tournament templates stored in the database
|
|
// @Tags EnetPulse - Tournament Templates
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response{data=[]domain.EnetpulseTournamentTemplate}
|
|
// @Failure 502 {object} domain.ErrorResponse
|
|
// @Router /api/v1/enetpulse/tournament-templates [get]
|
|
func (h *Handler) GetAllTournamentTemplates(c *fiber.Ctx) error {
|
|
// Call service
|
|
templates, err := h.enetPulseSvc.GetAllTournamentTemplates(c.Context())
|
|
if err != nil {
|
|
log.Println("GetAllTournamentTemplates error:", err)
|
|
return c.Status(fiber.StatusBadGateway).JSON(domain.ErrorResponse{
|
|
Message: "Failed to fetch tournament templates",
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Tournament templates fetched successfully",
|
|
Data: templates,
|
|
StatusCode: fiber.StatusOK,
|
|
Success: true,
|
|
})
|
|
}
|
|
|
|
// GetAllTournaments godoc
|
|
// @Summary Get all tournaments
|
|
// @Description Fetches all tournaments stored in the database
|
|
// @Tags EnetPulse - Tournaments
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response{data=[]domain.EnetpulseTournament}
|
|
// @Failure 502 {object} domain.ErrorResponse
|
|
// @Router /api/v1/enetpulse/tournaments [get]
|
|
func (h *Handler) GetAllTournaments(c *fiber.Ctx) error {
|
|
// Call service
|
|
tournaments, err := h.enetPulseSvc.GetAllTournaments(c.Context())
|
|
if err != nil {
|
|
log.Println("GetAllTournaments error:", err)
|
|
return c.Status(fiber.StatusBadGateway).JSON(domain.ErrorResponse{
|
|
Message: "Failed to fetch tournaments",
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Tournaments fetched successfully",
|
|
Data: tournaments,
|
|
StatusCode: fiber.StatusOK,
|
|
Success: true,
|
|
})
|
|
}
|
|
|
|
// GetAllTournamentStages godoc
|
|
// @Summary Get all tournament stages
|
|
// @Description Fetches all tournament stages stored in the database
|
|
// @Tags EnetPulse - Tournament Stages
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response{data=[]domain.EnetpulseTournamentStage}
|
|
// @Failure 502 {object} domain.ErrorResponse
|
|
// @Router /api/v1/enetpulse/tournament-stages [get]
|
|
func (h *Handler) GetAllTournamentStages(c *fiber.Ctx) error {
|
|
// Call service
|
|
stages, err := h.enetPulseSvc.GetAllTournamentStages(c.Context())
|
|
if err != nil {
|
|
log.Println("GetAllTournamentStages error:", err)
|
|
return c.Status(fiber.StatusBadGateway).JSON(domain.ErrorResponse{
|
|
Message: "Failed to fetch tournament stages",
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Tournament stages fetched successfully",
|
|
Data: stages,
|
|
StatusCode: fiber.StatusOK,
|
|
Success: true,
|
|
})
|
|
}
|
|
|
|
// Helper: parse comma-separated string into []int
|
|
func parseIntSlice(input string) []int {
|
|
if input == "" {
|
|
return nil
|
|
}
|
|
parts := strings.Split(input, ",")
|
|
result := make([]int, 0, len(parts))
|
|
for _, p := range parts {
|
|
if n, err := strconv.Atoi(strings.TrimSpace(p)); err == nil {
|
|
result = append(result, n)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// Helper: convert []int to []int64
|
|
func intSliceToInt64Slice(input []int) []int64 {
|
|
if input == nil {
|
|
return nil
|
|
}
|
|
result := make([]int64, len(input))
|
|
for i, v := range input {
|
|
result[i] = int64(v)
|
|
}
|
|
return result
|
|
}
|