feat(F-151): completed feature
This commit is contained in:
87
work/artifacts/F-151/implementer.md
Normal file
87
work/artifacts/F-151/implementer.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# F-151 — Implementer evidence
|
||||
|
||||
## Problema observado
|
||||
|
||||
Los servicios estaban levantados y respondían HTTP 200, pero la base activa estaba vacía:
|
||||
|
||||
- `catalog_products`: 0
|
||||
- `catalog_product_variants`: 0
|
||||
- `pricing_variant_prices`: 0
|
||||
- `inventory_stock`: 0
|
||||
- `categories_categories`: 0
|
||||
- `brands_brands`: 0
|
||||
- `backoffice_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:
|
||||
|
||||
```text
|
||||
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_movements` para 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_EMAIL` y `SEED_ADMIN_PASSWORD`.
|
||||
- si `NODE_ENV=production`, exige `SEED_ADMIN_PASSWORD` explícito.
|
||||
|
||||
### `project/src/modules/backoffice/api/backoffice.routes.ts`
|
||||
|
||||
- Cookie `backoffice_session` ahora usa `secure` solo si la request es HTTPS o `x-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.cjs` sobre la DB activa.
|
||||
- Reiniciado solo backend para cargar el cambio de cookie.
|
||||
|
||||
## Estado verificado
|
||||
|
||||
Counts actuales:
|
||||
|
||||
```text
|
||||
products: 12
|
||||
variants: 12
|
||||
prices: 12
|
||||
stock: 12
|
||||
categories: 11
|
||||
brands: 6
|
||||
backoffice_users: admin@mdv.local / admin
|
||||
```
|
||||
|
||||
Pruebas:
|
||||
|
||||
```text
|
||||
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`.
|
||||
Reference in New Issue
Block a user