feat(F-120): completed feature

This commit is contained in:
chattie
2026-08-21 15:31:13 +02:00
parent ba05e99a63
commit b9610bf546
10 changed files with 258 additions and 31 deletions

View File

@@ -5118,6 +5118,102 @@
"close": true
},
"completed_at": "2026-08-21T13:04:08Z"
},
{
"id": "F-120",
"type": "fix",
"title": "Fix category delete returning 409 when it could delete with products",
"problem": "DELETE /admin/categories/:id returns 409 when the category has children. The user wants to delete categories that might have products, but if children are an issue they should be told clearly. The current error is also a conflict even when the category has no products.",
"goal": "Allow DeleteCategory to clear foreign keys / detach products when deleting a category, or surface a clear error when products are attached. Verify the 409 is only returned when truly blocking.",
"scope_in": [
"categories service",
"use cases",
"repository"
],
"scope_out": [
"no bulk delete"
],
"priority": "high",
"risk": "low",
"description": "Problem: DELETE /admin/categories/:id returns 409 when the category has children. The user wants to delete categories that might have products, but if children are an issue they should be told clearly. The current error is also a conflict even when the category has no products.. Goal: Allow DeleteCategory to clear foreign keys / detach products when deleting a category, or surface a clear error when products are attached. Verify the 409 is only returned when truly blocking.. Scope IN: categories service, use cases, repository. Scope OUT: no bulk delete. Type: fix. Priority: high. Risk: low.",
"acceptance": [
"DELETE /admin/categories/:id returns 200 when category has no children/products",
"DELETE /admin/categories/:id returns 409 with clear code when products are attached",
"No regression on category listing",
"Typecheck, tests, verify pass"
],
"status": "done",
"created_at": "2026-08-21",
"gates": {
"reviewer": true,
"security": true,
"qa": true,
"close": true
},
"completed_at": "2026-08-21T13:31:13Z"
},
{
"id": "F-121",
"type": "fix",
"title": "Reorder product editor: drop save-first restriction for price/stock/EAN",
"problem": "The user complains that the price/stock/EAN section shows \"Save first the product to configure price, stock, EAN\" and they cannot edit it without saving the product first. The same happens in the images section. The user wants the editor to work on a new product without that gauntlet.",
"goal": "Allow price/stock/EAN to be edited on a new product that has not been saved yet. Either auto-create the variant on first interaction, or pre-fetch a placeholder, or seed the variant before the user navigates to the section. The simplest path: create the variant as soon as the product is created via the parent form, and expose the editor.",
"scope_in": [
"product editor",
"PriceStockSection",
"ImageSection",
"useEffect"
],
"scope_out": [
"no flow changes"
],
"priority": "med",
"risk": "med",
"description": "Problem: The user complains that the price/stock/EAN section shows \"Save first the product to configure price, stock, EAN\" and they cannot edit it without saving the product first. The same happens in the images section. The user wants the editor to work on a new product without that gauntlet.. Goal: Allow price/stock/EAN to be edited on a new product that has not been saved yet. Either auto-create the variant on first interaction, or pre-fetch a placeholder, or seed the variant before the user navigates to the section. The simplest path: create the variant as soon as the product is created via the parent form, and expose the editor.. Scope IN: product editor, PriceStockSection, ImageSection, useEffect. Scope OUT: no flow changes. Type: fix. Priority: med. Risk: med.",
"acceptance": [
"PriceStockSection renders the actual editor for a new product",
"Editor allows net price typing without first saving",
"ImageSection renders the actual image editor for a new product",
"Field saving still works after create",
"Typecheck, tests, verify pass"
],
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-122",
"type": "fix",
"title": "Remove redundant variant warning when product has only one variant",
"problem": "PriceStockSection shows \"⚠️ Este producto tiene X variante(s) heredada(s). Se está editando la principal.\" when extraVariants > 0. The user wants this warning gone because each product has at most one variant (the legacy migrations were for when the model supported multiple variants, but the simplified model has only one). The warning is noise.",
"goal": "Drop the warning and the legacy extraVariants state. Confirm the underlying API does not return extra variants.",
"scope_in": [
"PriceStockSection",
"useEffect cleanup"
],
"scope_out": [
"no behavior changes"
],
"priority": "low",
"risk": "low",
"description": "Problem: PriceStockSection shows \"⚠️ Este producto tiene X variante(s) heredada(s). Se está editando la principal.\" when extraVariants > 0. The user wants this warning gone because each product has at most one variant (the legacy migrations were for when the model supported multiple variants, but the simplified model has only one). The warning is noise.. Goal: Drop the warning and the legacy extraVariants state. Confirm the underlying API does not return extra variants.. Scope IN: PriceStockSection, useEffect cleanup. Scope OUT: no behavior changes. Type: fix. Priority: low. Risk: low.",
"acceptance": [
"PriceStockSection no longer shows the legacy warning",
"extraVariants state removed",
"Editor still loads the single variant correctly",
"Typecheck, tests, verify pass"
],
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
}
]
}