67 lines
2.6 KiB
Markdown
67 lines
2.6 KiB
Markdown
# 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. |