ultisuite-backend/internal/search/web_handler.go
R3D347HR4Y 621b0099d6
Some checks are pending
CI / Go tests (push) Waiting to run
CI / Integration tests (push) Waiting to run
CI / DB migrations (push) Waiting to run
feat(deploy): enhance Nginx configuration and API integration for UltiAI
- Updated .env.example to include new configuration options for the UltiAI branding and API endpoints.
- Enhanced Nginx configuration to support new API routes for the MCP and WebSocket connections.
- Introduced sub-filters for branding adjustments in Nginx responses.
- Added new JavaScript patch for API endpoint adjustments.
- Implemented tests for new API functionalities and improved error handling in the AI gateway.
2026-06-15 00:22:23 +02:00

59 lines
1.6 KiB
Go

package search
import (
"errors"
"net/http"
"strconv"
"github.com/ultisuite/ulti-backend/internal/api/apiresponse"
"github.com/ultisuite/ulti-backend/internal/api/middleware"
"github.com/ultisuite/ulti-backend/internal/contacts/discovery"
)
type WebHandler struct {
discovery *discovery.Service
}
func NewWebHandler(discovery *discovery.Service) *WebHandler {
return &WebHandler{discovery: discovery}
}
func (h *WebHandler) Search(w http.ResponseWriter, r *http.Request) {
if h.discovery == nil {
apiresponse.WriteError(w, r, http.StatusServiceUnavailable, apiresponse.CodeInternal, "web search unavailable", nil)
return
}
claims := middleware.ClaimsFromContext(r.Context())
query := r.URL.Query().Get("q")
if query == "" {
apiresponse.WriteError(w, r, http.StatusBadRequest, apiresponse.CodeInvalidQueryParam, "q is required", nil)
return
}
count := 5
if raw := r.URL.Query().Get("count"); raw != "" {
parsed, err := strconv.Atoi(raw)
if err != nil || parsed <= 0 {
apiresponse.WriteError(w, r, http.StatusBadRequest, apiresponse.CodeInvalidQueryParam, "invalid count", nil)
return
}
count = parsed
}
results, err := h.discovery.SearchWeb(r.Context(), claims.Sub, query, count)
if err != nil {
if errors.Is(err, discovery.ErrWebSearchNotConfigured) {
apiresponse.WriteError(w, r, http.StatusServiceUnavailable, "web_search_not_configured", "web search provider not configured", nil)
return
}
apiresponse.WriteError(w, r, http.StatusBadGateway, apiresponse.CodeInternal, err.Error(), nil)
return
}
apiresponse.WriteJSON(w, http.StatusOK, map[string]any{
"query": query,
"results": results,
})
}