2.2 KiB
2.2 KiB
F-100 — Arquitectura: generación automática de SKU a partir del título
Estado actual
- En
POST /products(catálogo) se crea una variante por defecto consku = "SKU-MV-${productId}". - El admin no expone la edición del SKU en
PriceStockSection(sólo EAN, precios, stock). - No hay endpoint de "sugerir SKU" en el backend.
Decisiones
- Helper puro
src/modules/catalog/domain/sku.ts:generateSkuFromTitle(title): normaliza el título (mayúsculas, sin diacríticos, sin caracteres no alfanuméricos, guiones separadores, recorte a 100 chars). DevuelveMV-<SLUG>.uniqueSku(base, existing: Set<string>): si el base está ocupado, pruebabase-2,base-3, … hasta encontrar uno libre.
- Backend:
- Cambiar la creación de producto para usar el SKU derivado del título en lugar del UUID; mantener
uniqueSkupara resolver colisiones. - Endpoint nuevo
POST /admin/products/sku:generatecon body{ title: string }→{ sku: string }. Útil para preview antes de crear. - Permitir que el admin edite el SKU en la sección "Precios y Stock" (PriceStockSection). Persistencia vía
PATCH /products/:id/variants/:variantId.
- Cambiar la creación de producto para usar el SKU derivado del título en lugar del UUID; mantener
- Admin UI (
apps/admin):api-client.ts:productsApi.generateSku(title)yproductsApi.updateVariant(id, vid, { sku }).- Sección "Precios y Stock": muestra el SKU actual como input editable con botón "Regenerar" que llama al endpoint.
- Página de creación de producto: llama a
generateSkual blur del nombre para previsualizar el SKU.
- Validación:
- SKU:
^[A-Za-z0-9-]+$, 1..100 chars (alineado connewVariantSchema). - El endpoint
/admin/products/sku:generatesólo da sugerencias; el cliente decide. - Duplicados: PostgreSQL ya rechaza por
UNIQUEenproduct_variants.sku. Aclarar el error al admin con un mensaje claro.
- SKU:
Tests
sku.test.ts(6-8): normalización, acentos, longitudes, collision inuniqueSku.- Añadir test al repositorio Variantes (e2e) si el repo expone
findBySku: comprobar que se devuelve un SKU existente para validar.
Fuera de alcance
- Sin servicio externo de SKU.
- Sin relajar la unicidad.
- Sin afectar a las variantes ya creadas (migración no requerida).