veza/veza-backend-api/internal/api/routes_search.go

43 lines
1.5 KiB
Go
Raw Normal View History

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