2.5 KiB
2.5 KiB
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,SKUoEAN - aplica filtros server-side:
allin_stocklow_stockout_of_stockexpiringlow_margin
- devuelve filas ya enriquecidas con:
- producto
- variante
- stock
- precio
- margen
- caducidad
- devuelve además
statsagregados 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 productogetAvailability()por filagetVariantPrice()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.tsxproject/apps/admin/src/lib/api-client.tsproject/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.tsporque 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.