2.9 KiB
2.9 KiB
F-151 — Implementer evidence
Problema observado
Los servicios estaban levantados y respondían HTTP 200, pero la base activa estaba vacía:
catalog_products: 0catalog_product_variants: 0pricing_variant_prices: 0inventory_stock: 0categories_categories: 0brands_brands: 0backoffice_users: 0
Por eso:
- frontend no mostraba productos;
- admin no aceptaba credenciales porque no existía ningún usuario backoffice.
Además, al ejecutar node scripts/seed.cjs, fallaba desde POS-002:
there is no unique or exclusion constraint matching the ON CONFLICT specification
Causa: inventory_stock ya no es único por variant_id; ahora es único por (variant_id, store_id).
Tras crear usuario backoffice, había otro problema: login devolvía 200, pero la cookie backoffice_session se emitía con Secure en HTTP local, por lo que el navegador/curl no la reenviaba.
Cambios
project/scripts/seed.cjs
- Limpia también
inventory_movementspara evitar movimientos obsoletos tras reseed. - Inserta stock con
store_id = DEFAULT_STORE_ID. - Usa
ON CONFLICT (variant_id, store_id). - Crea/actualiza un usuario backoffice admin:
- email por defecto:
admin@mdv.local - password por defecto en seed dev:
Admin123456! - configurable con
SEED_ADMIN_EMAILySEED_ADMIN_PASSWORD. - si
NODE_ENV=production, exigeSEED_ADMIN_PASSWORDexplícito.
- email por defecto:
project/src/modules/backoffice/api/backoffice.routes.ts
- Cookie
backoffice_sessionahora usasecuresolo si la request es HTTPS ox-forwarded-proto=https. - En HTTP local/LAN la cookie se emite sin
Secure, permitiendo que el admin mantenga sesión.
Acciones aplicadas al entorno
- Ejecutado
node scripts/seed.cjssobre la DB activa. - Reiniciado solo backend para cargar el cambio de cookie.
Estado verificado
Counts actuales:
products: 12
variants: 12
prices: 12
stock: 12
categories: 11
brands: 6
backoffice_users: admin@mdv.local / admin
Pruebas:
GET /health backend/admin/frontend/storefront ✅
POST /backoffice/auth/login ✅ 200
Set-Cookie backoffice_session sin Secure en HTTP ✅
GET /backoffice/auth/me vía admin proxy ✅
GET /catalog/products?limit=2 vía admin proxy ✅ productos
GET /products/search?limit=1 público ✅ productos
GET frontend /products contiene productos ✅
npm run build ✅
npm test ✅ 191 passed, 56 skipped
eslint/prettier archivos tocados ✅
./scripts/verify.sh ✅
git diff --check ✅
Nota: npm run lint global sigue fallando por errores preexistentes no tocados:
scripts/generate-thumbnails.mjs: unused import y empty block.src/infrastructure/logging/log-broadcaster.ts:no-this-alias.