package server import ( "log/slog" "net/http" "github.com/go-chi/chi/v5" "sourcecraft.dev/bigbes/huntsman/internal/domain/search" "sourcecraft.dev/bigbes/huntsman/internal/platform/health" "sourcecraft.dev/bigbes/huntsman/internal/server/middleware" ) // Routes wires every HTTP route the service exposes. // // Keeping route registration in one file makes it easy to audit the // public surface area without grepping every handler package. func Routes(logger *slog.Logger, h *health.Health, searchHandler *search.Handler) http.Handler { r := chi.NewRouter() r.Use(middleware.RequestID) r.Use(middleware.Recovery(logger)) r.Use(middleware.Logging(logger)) r.Get("/healthz", h.Healthz) r.Get("/readyz", h.Readyz) r.Get("/", indexHandler) searchHandler.RegisterRoutes(r) return r } // indexHandler advertises the unified OpenSearch document via a // tag, so browsers offer to add the engine when // the user visits the root URL. func indexHandler(w http.ResponseWriter, _ *http.Request) { const body = ` huntsman

huntsman

Multi-provider search router. Use prefixes:

Endpoints: /search?q=..., /providers, /opensearch.xml, /opensearch/{provider}.xml.

` w.Header().Set("Content-Type", "text/html; charset=utf-8") _, _ = w.Write([]byte(body)) }