# F-131 — Buscador /products (admin) no filtra ## Diagnóstico Reproducción: 1. Login en `http://192.168.18.93:3004/` 2. Navegar a `/products` 3. Escribir "almendra" en el buscador 4. → La lista sigue mostrando los 13 productos (no filtra) Investigación: ``` GET http://192.168.18.93:3000/catalog/products?q=almendra&limit=5 → backend responde: total=1, items=1 ("Almendras Crudas Ecologicas") ✅ correcto GET http://192.168.18.93:3004/api/catalog/products?q=almendra&limit=5 → backend responde: total=13, items=13 (todos) ❌ filtro perdido ``` El **frontend y el backend funcionan bien aisladamente**. El problema está en el proxy del admin. ## Causa raíz `apps/admin/src/app/api/[...path]/route.ts` (catch-all proxy que reenvía al backend) usa: ```ts const path = req.nextUrl.pathname.replace('/api/', ''); const backendRes = await fetch(`${API}/${path}`, { ... }); ``` **Nunca añade `req.nextUrl.search`**, por lo que cualquier query string (`?q=…`, `?limit=…`, `?offset=…`, etc.) se descarta antes de llegar al backend. Esto afecta a **TODOS los métodos** (GET, POST, PATCH, PUT, DELETE) — todos usan `req.nextUrl.pathname` sin `req.nextUrl.search`. Consecuencias visibles: - `/products` no filtra (no llega `q`) - `/inventory` no filtra (F-126, mismo síntoma) - Paginación rota si la API espera `?limit=&offset=` (los `totalPages` se calculan con `data.items.length` en frontend, pero el `limit` real siempre cae al default del backend) - Cualquier filtro futuro basado en query params falla silenciosamente ## Diseño Extraer `const search = req.nextUrl.search` (ya viene con `?` o vacío) y concatenarlo en las 5 funciones handler. ```ts const path = req.nextUrl.pathname.replace('/api/', ''); const search = req.nextUrl.search; // "" o "?q=…&limit=…" const backendRes = await fetch(`${API}/${path}${search}`, { ... }); ``` Aplicar a: GET, POST, PATCH, PUT, DELETE. ## Riesgos - Bajo. Es un bug donde se omite información; el cambio es añadir lo que faltaba. - Riesgo residual: si alguna ruta backend asume un orden fijo de query params y se envía en otro orden, podría romper tests, pero nuestro backend usa URLSearchParams en server (orden-independiente). ## Plan 1. Editar `apps/admin/src/app/api/[...path]/route.ts` — añadir `const search = req.nextUrl.search` en cada handler y concatenarlo en la URL. 2. `cd apps/admin && npx tsc --noEmit`. 3. `cd apps/admin && npm run build`. 4. Verificar con `curl`: - `curl -b cookies /api/catalog/products?q=almendra` → 1 item - `curl -b cookies /api/catalog/products?q=almendra&limit=5` → 1 item, no 13 5. Cerrar gates.