package api import ( "context" "os" "github.com/gin-gonic/gin" "go.uber.org/zap" "veza-backend-api/internal/handlers" "veza-backend-api/internal/services" elasticsearch "veza-backend-api/internal/elasticsearch" ) // setupSearchRoutes configure la route de recherche unifiée GET /search et autocomplete (v0.10.2 F363-F365) // Uses Elasticsearch when ELASTICSEARCH_URL is set, else falls back to PostgreSQL func (r *APIRouter) setupSearchRoutes(router *gin.RouterGroup) { esCfg := elasticsearch.LoadConfig() var searchSvc handlers.SearchServiceInterface if esCfg.Enabled { esClient, err := elasticsearch.NewClient(esCfg, r.logger) if err != nil { r.logger.Warn("Elasticsearch unavailable, falling back to PostgreSQL search", zap.Error(err)) searchSvc = services.NewSearchService(r.db, r.logger) } else { // Optional: run reindex at startup if ELASTICSEARCH_AUTO_INDEX if os.Getenv("ELASTICSEARCH_AUTO_INDEX") == "true" { idx := elasticsearch.NewIndexer(esClient, r.db.GormDB, r.logger) if err := idx.ReindexAll(context.Background()); err != nil { r.logger.Warn("Elasticsearch auto-reindex failed", zap.Error(err)) } } searchSvc = elasticsearch.NewSearchService(esClient, r.logger) } } else { searchSvc = services.NewSearchService(r.db, r.logger) } handlers.NewSearchHandlersWithInterface(searchSvc) router.GET("/search", handlers.SearchHandlersInstance.Search) router.GET("/search/suggestions", handlers.SearchHandlersInstance.Suggestions) }