fix: POST /products 500 — invalid unit FK on unrecognized items

Two bugs caused a FK constraint violation on products.unit:
1. RecognizedItem.fromJson fell back to 'шт' (Cyrillic, not a valid
   units.code) when the AI returned a null unit — changed to 'pcs'.
2. The unit dropdown in RecognitionConfirmScreen displayed units.keys.first
   for invalid units but never updated item.unit, so the invalid value was
   still submitted. Added a reconcile step in build() that syncs item.unit
   to units.keys.first whenever the stored value is not in the valid set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
dbastrikin
2026-03-19 23:05:19 +02:00
parent 9e7fc09f4b
commit 6861e5e754
2 changed files with 11 additions and 6 deletions

View File

@@ -248,10 +248,14 @@ class _ItemTileState extends State<_ItemTile> {
const SizedBox(width: 8),
widget.units.isEmpty
? const SizedBox(width: 48)
: DropdownButton<String>(
value: widget.units.containsKey(widget.item.unit)
? widget.item.unit
: widget.units.keys.first,
: Builder(builder: (builderContext) {
// Reconcile item.unit with valid server codes so that the
// submitted value matches what the dropdown displays.
if (!widget.units.containsKey(widget.item.unit)) {
widget.item.unit = widget.units.keys.first;
}
return DropdownButton<String>(
value: widget.item.unit,
underline: const SizedBox(),
items: widget.units.entries
.map((e) => DropdownMenuItem(value: e.key, child: Text(e.value)))
@@ -262,7 +266,8 @@ class _ItemTileState extends State<_ItemTile> {
widget.onChanged();
}
},
),
);
}),
IconButton(
icon: const Icon(Icons.close),
onPressed: widget.onDelete,