func()

in src/psearch/serving/internal/api/handlers.go [69:109]


func (c *Controller) Search(ctx *gin.Context) {
	// Parse the request body
	var req models.SearchRequest
	if err := ctx.ShouldBindJSON(&req); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// Set default values if not provided
	limit := c.config.DefaultLimit
	if req.Limit != nil {
		limit = *req.Limit
	}

	minScore := c.config.MinScoreValue
	if req.MinScore != nil {
		minScore = *req.MinScore
	}

	alpha := c.config.DefaultAlpha
	if req.Alpha != nil {
		alpha = *req.Alpha
	}

	log.Printf("Search request: query=%s, limit=%d, minScore=%.2f, alpha=%.2f", 
		req.Query, limit, minScore, alpha)

	// Perform the hybrid search
	results, err := c.spannerSvc.HybridSearch(ctx, req.Query, limit, minScore, alpha)
	if err != nil {
		log.Printf("Search error: %v", err)
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": "Search failed"})
		return
	}

	// Return the results
	ctx.JSON(http.StatusOK, models.SearchResponse{
		Results:    results,
		TotalFound: len(results),
	})
}