80 lines
2.5 KiB
Markdown
80 lines
2.5 KiB
Markdown
# 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.
|