64 lines
1.6 KiB
Markdown
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
|