# Implementer evidence — INVENTORY-OPT

## Cambios realizados

### 1) Nuevo endpoint backend optimizado
Añadí `GET /inventory/admin/overview` en:
- `project/src/modules/inventory/api/inventory.routes.ts`

El endpoint:
- pagina server-side (`limit`, `offset`)
- busca por `nombre`, `SKU` o `EAN`
- aplica filtros server-side:
  - `all`
  - `in_stock`
  - `low_stock`
  - `out_of_stock`
  - `expiring`
  - `low_margin`
- devuelve filas ya enriquecidas con:
  - producto
  - variante
  - stock
  - precio
  - margen
  - caducidad
- devuelve además `stats` agregados para cards del dashboard de inventario

### 2) Eliminación del N+1 en admin inventory
Antes la página hacía:
- `productsApi.list(limit=100)`
- `getVariants()` por producto
- `getAvailability()` por fila
- `getVariantPrice()` por fila

Ahora la página consume una única llamada paginada:
- `inventoryApi.listOverview(...)`

### 3) UI admin paginada
Actualicé:
- `project/apps/admin/src/app/(dashboard)/inventory/page.tsx`
- `project/apps/admin/src/lib/api-client.ts`
- `project/apps/admin/src/types/index.ts`

La página ahora:
- usa búsqueda debounced server-side
- usa filtros server-side
- muestra paginación real
- sigue permitiendo editar inline:
  - stock
  - EAN
  - caducidad

### 4) Test de integración real PostgreSQL
Añadí:
- `project/src/app/tests/inventory-admin-overview.itest.ts`

Valida:
- paginación
- búsqueda por EAN
- filtro `low_margin`
- filtro `expiring`
- stats agregados

## Validación
- `cd project && npm run typecheck` ✅
- `cd project && npm run build` ✅
- `cd project/apps/admin && npm run build` ✅
- `cd project && TEST_DATABASE_URL=postgres://mdv:mdv_dev_only@localhost:5432/mercadodevida_test npx vitest run src/app/tests/inventory-admin-overview.itest.ts --no-file-parallelism` ✅
- `./scripts/verify.sh` ✅
- `git diff --check` ✅

## Decisiones técnicas
- No introduje un módulo nuevo: reutilicé `inventory.routes.ts` porque el problema principal era de lectura agregada para admin.
- El inventario se optimiza a nivel de query y tráfico HTTP, que era el cuello de botella real para 10k+ productos.
- Mantuve edición inline en la UI para no romper el flujo actual del admin.

## Deuda / siguiente paso
- Si el volumen sigue creciendo, el siguiente paso natural sería añadir índices específicos para búsquedas admin por nombre/SKU/EAN o una vista materializada/consulta especializada.
- La build del admin sigue mostrando warnings preexistentes de Turbopack sobre acceso dinámico a ficheros en uploads; no están relacionados con INVENTORY-OPT.
