Files
devops 902350b58b Fase 3a ADR 0006 Etapa 2: buscador del navbar via Meilisearch
PredictiveSearch pasa de filtrar en memoria el arreglo completo de
productos (prop products, substring match) a un fetch debounced
(250ms, con AbortController) contra la nueva ruta /api/search --
mismo componente visual, solo cambia de donde salen los datos, tal
como pide el ADR 0006 seccion 5.

/api/search (nueva, server-side) es el puente same-origin: el
componente es cliente y no puede pegarle directo al provider
server-side (MEDUSA_BACKEND_URL es DNS interno del cluster, no
resuelve desde el navegador).

CatalogProvider gana un metodo OPCIONAL searchWithFacets? (no cambia
la firma de getProducts/searchProducts) -- mock.ts y shopify.ts
compilan sin tocarlos, siguen sin implementarlo. medusa.ts lo
implementa contra /store/search (Fase 2), reutilizando mapProduct()
ya que la ruta devuelve el mismo shape de producto que /store/products.
searchProducts tambien se repunta a /store/search, dejando de usar el
?q= + re-filtro client-side de fetchProducts/matchesFilters para busqueda
(que sigue sirviendo para navegacion sin busqueda, sin cambios).

Navbar deja de pasarle products a PredictiveSearch (ya no los necesita)
pero los sigue recibiendo el mismo -- collections todavia se deriva de
ahi.

Limpieza: borrado patches/frontend-medusa-env.yaml, confirmado
huerfano (ningun kustomization lo referencia; el patch que si esta
vivo es frontend/patches/deployment.yaml).

Validado: build completo de Docker (target builder) -- npm ci,
next build con typecheck, /api/search aparece en la tabla de rutas
generada. Cero errores nuevos (los warnings de ESLint son
preexistentes en catalog-client.tsx, no tocado en esta fase).
2026-08-26 17:30:47 -05:00

33 lines
1.0 KiB
TypeScript

import type { CatalogProvider, ProductFilters } from "@/lib/headless/types";
import { medusaCatalogProvider } from "@/lib/headless/providers/medusa";
import { mockCatalogProvider } from "@/lib/headless/providers/mock";
import { shopifyCatalogProvider } from "@/lib/headless/providers/shopify";
function provider(): CatalogProvider {
switch (process.env.HEADLESS_PROVIDER) {
case "shopify": return shopifyCatalogProvider;
case "medusa": return medusaCatalogProvider;
default: return mockCatalogProvider;
}
}
export async function getProducts(filters?: ProductFilters) {
return provider().getProducts(filters);
}
export async function getProductBySlug(slug: string) {
return provider().getProductBySlug(slug);
}
export async function searchProducts(query: string, limit?: number) {
return provider().searchProducts(query, limit);
}
export async function getCategories() {
return provider().getCategories();
}
export async function searchWithFacets(filters?: ProductFilters) {
return provider().searchWithFacets?.(filters);
}