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, }) } // 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 }