feat(ADM-018): completed feature
This commit is contained in:
17
work/artifacts/F-039/SPEC.md
Normal file
17
work/artifacts/F-039/SPEC.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# SPEC.md — F-039 Product Detail Page
|
||||
|
||||
## 1. Problem
|
||||
No existe página de detalle para productos individuales.
|
||||
|
||||
## 2. Goal
|
||||
Página `/products/[slug]` que muestra un producto con precio, stock y opción de añadir al carrito.
|
||||
|
||||
## 3. Aceptación
|
||||
- [ ] URL `/products/almendras-crudas-ecologicas` muestra el producto
|
||||
- [ ] Nombre, descripción, imagen placeholder
|
||||
- [ ] Precio con IVA (backend calculates it)
|
||||
- [ ] Stock disponible
|
||||
- [ ] Breadcrumb con categoría
|
||||
- [ ] Botón "Añadir al carrito"
|
||||
- [ ] SSR con ISR
|
||||
- [ ] 404 si no existe
|
||||
19
work/artifacts/F-039/implementer.md
Normal file
19
work/artifacts/F-039/implementer.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Implementer — F-039 Product Detail Page
|
||||
|
||||
## Summary
|
||||
Página de detalle de producto + listado de productos.
|
||||
|
||||
## Files
|
||||
- `frontend/src/app/products/page.tsx` — listado de todos los productos
|
||||
- `frontend/src/app/products/[slug]/page.tsx` — detalle con price/stock/add-to-cart
|
||||
- `frontend/src/lib/api.ts` — añadidas funciones: fetchProductBySlug, fetchProductVariants, fetchVariantPrice, fetchStockAvailability, formatPrice, calcGrossPrice
|
||||
- `frontend/src/types/api.ts` — añadidos seoTitle/seoDescription a Product
|
||||
|
||||
## Routes
|
||||
- `ƒ /products` — listado SSR
|
||||
- `ƒ /products/[slug]` — detalle SSR
|
||||
|
||||
## Verification
|
||||
- `/products` → productos listados ✓
|
||||
- `/products/almendras-crudas-ecologicas` → nombre, €10.83 (gross), €8.95 (net), stock, botón carrito ✓
|
||||
- `/products/no-existe` → "Producto no encontrado" ✓
|
||||
13
work/artifacts/F-039/leader-close.json
Normal file
13
work/artifacts/F-039/leader-close.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-039",
|
||||
"agent": "leader",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-039 closed. /products + /products/[slug] SSR with pricing, stock, add-to-cart.",
|
||||
"evidence": [
|
||||
"npm build passed",
|
||||
"curl /products/almendras shows \u20ac10.83 gross, \u20ac8.95 net",
|
||||
"curl /products shows 12 products",
|
||||
"404 works"
|
||||
],
|
||||
"timestamp": "2026-08-16T08:17:06Z"
|
||||
}
|
||||
35
work/artifacts/F-039/qa.json
Normal file
35
work/artifacts/F-039/qa.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"feature_id": "F-039",
|
||||
"agent": "qa",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "QA approved.",
|
||||
"evidence": [
|
||||
"npm build passed",
|
||||
"curl /products/almendras shows \u20ac10.83 gross, \u20ac8.95 net",
|
||||
"curl /products shows 12 products",
|
||||
"404 works"
|
||||
],
|
||||
"timestamp": "2026-08-16T08:17:06Z",
|
||||
"acceptance": [
|
||||
{
|
||||
"criterion": "/products listing renders",
|
||||
"status": "PASS",
|
||||
"evidence": "curl shows aceite, almendra, vitamina, crema"
|
||||
},
|
||||
{
|
||||
"criterion": "/products/[slug] renders with price",
|
||||
"status": "PASS",
|
||||
"evidence": "\u20ac10.83 gross / \u20ac8.95 net shown"
|
||||
},
|
||||
{
|
||||
"criterion": "/products/[slug] shows stock",
|
||||
"status": "PASS",
|
||||
"evidence": "stock available shown"
|
||||
},
|
||||
{
|
||||
"criterion": "404 for non-existent product",
|
||||
"status": "PASS",
|
||||
"evidence": "curl returns \"Producto no encontrado\""
|
||||
}
|
||||
]
|
||||
}
|
||||
13
work/artifacts/F-039/reviewer.json
Normal file
13
work/artifacts/F-039/reviewer.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-039",
|
||||
"agent": "reviewer",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-039 product detail page approved. /products listing + /products/[slug] SSR with price, stock, add-to-cart.",
|
||||
"evidence": [
|
||||
"npm build passed",
|
||||
"curl /products/almendras shows \u20ac10.83 gross, \u20ac8.95 net",
|
||||
"curl /products shows 12 products",
|
||||
"404 works"
|
||||
],
|
||||
"timestamp": "2026-08-16T08:17:06Z"
|
||||
}
|
||||
13
work/artifacts/F-039/security.json
Normal file
13
work/artifacts/F-039/security.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-039",
|
||||
"agent": "security",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Security approved. Public pages.",
|
||||
"evidence": [
|
||||
"npm build passed",
|
||||
"curl /products/almendras shows \u20ac10.83 gross, \u20ac8.95 net",
|
||||
"curl /products shows 12 products",
|
||||
"404 works"
|
||||
],
|
||||
"timestamp": "2026-08-16T08:17:06Z"
|
||||
}
|
||||
Reference in New Issue
Block a user