Files
mercadodevida/work/artifacts/INVENTORY-OPT/architect.md

64 lines
1.6 KiB
Markdown

# Arquitectura — INVENTORY-OPT
## Problema
La pantalla admin de inventario no escala a 10k+ productos porque hoy:
- pide `productsApi.list(limit=100)`
- por cada producto hace `getVariants`
- por cada fila hace `getAvailability`
- por cada fila hace `getVariantPrice`
Eso introduce N+1 HTTP + N+1 SQL y además no tiene paginación real del inventario.
## Diseño propuesto
### 1) Nuevo endpoint backend optimizado
Crear `GET /inventory/admin/overview` en el módulo `inventory`.
Query params:
- `q`
- `filter`
- `limit`
- `offset`
Respuesta:
- `items[]` con fila ya enriquecida (producto + variante + stock + precio + caducidad)
- `total`
- `stats` con conteos globales (`inStock`, `lowStock`, `outOfStock`)
### 2) Query única paginada
La query leerá directamente:
- `catalog_products`
- `catalog_product_variants`
- `inventory_stock`
- `pricing_variant_prices`
Con esto evitamos las múltiples rondas actuales desde el admin.
### 3) Filtros server-side
Mover al backend los filtros ya visibles en UI:
- `all`
- `in_stock`
- `low_stock`
- `out_of_stock`
- `expiring`
- `low_margin`
### 4) UI admin
Actualizar `project/apps/admin/src/app/(dashboard)/inventory/page.tsx` para:
- consumir el nuevo endpoint
- usar paginación real
- mantener búsqueda debounced
- mantener filtros existentes
- evitar llamadas por fila
## No entra
- Refactor de módulos no relacionados
- Reescritura de pricing o inventory core
- Cambios en TPV/storefront
## Validación
- typecheck backend/admin
- build backend/admin
- verify.sh
- prueba funcional manual de búsqueda/filtros/paginación