2.6 KiB
2.6 KiB
F-131 — Buscador /products (admin) no filtra
Diagnóstico
Reproducción:
- Login en
http://192.168.18.93:3004/ - Navegar a
/products - Escribir "almendra" en el buscador
- → 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:
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:
/productsno filtra (no llegaq)/inventoryno filtra (F-126, mismo síntoma)- Paginación rota si la API espera
?limit=&offset=(lostotalPagesse calculan condata.items.lengthen frontend, pero ellimitreal 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.
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
- Editar
apps/admin/src/app/api/[...path]/route.ts— añadirconst search = req.nextUrl.searchen cada handler y concatenarlo en la URL. cd apps/admin && npx tsc --noEmit.cd apps/admin && npm run build.- Verificar con
curl:curl -b cookies /api/catalog/products?q=almendra→ 1 itemcurl -b cookies /api/catalog/products?q=almendra&limit=5→ 1 item, no 13
- Cerrar gates.