updated quality for ore

This commit is contained in:
2026-11-12 13:57:23 -07:00
parent 4fbad900a2
commit c8c5e658e2
12 changed files with 376 additions and 25 deletions

View File

@@ -46,6 +46,8 @@ def enrich_entry(entry: InventoryEntry) -> dict:
"manufacturer": None,
"quantity": entry.quantity,
"notes": entry.notes,
"quality": entry.quality,
"quality_applicable": False,
"visibility": entry.visibility,
"available": False,
"created_at": entry.created_at,
@@ -61,6 +63,8 @@ def enrich_entry(entry: InventoryEntry) -> dict:
"manufacturer": item["manufacturer"],
"quantity": entry.quantity,
"notes": entry.notes,
"quality": entry.quality,
"quality_applicable": item.get("quality_applicable", False),
"visibility": entry.visibility,
"available": True,
"created_at": entry.created_at,
@@ -68,6 +72,14 @@ def enrich_entry(entry: InventoryEntry) -> dict:
}
def _validate_quality(item: dict, quality: int | None) -> None:
if quality is not None and not item.get("quality_applicable", False):
raise HTTPException(
status_code=422,
detail=f"Quality does not apply to '{item['name']}'",
)
def _find(db: DbSession, user: User, class_name: str) -> InventoryEntry | None:
return db.execute(
select(InventoryEntry).where(
@@ -178,10 +190,12 @@ def add_to_inventory(
db: DbSession = Depends(get_db),
):
class_name = payload.class_name.strip()
if class_name not in catalog.store.by_class_name:
item = catalog.store.by_class_name.get(class_name)
if item is None:
raise HTTPException(
status_code=404, detail=f"Catalog item '{class_name}' not found"
)
_validate_quality(item, payload.quality)
entry = _find(db, user, class_name)
created = entry is None
@@ -192,12 +206,15 @@ def add_to_inventory(
class_name=class_name,
quantity=payload.quantity,
notes=payload.notes,
quality=payload.quality,
)
db.add(entry)
else:
entry.quantity += payload.quantity
if payload.notes:
entry.notes = payload.notes
if payload.quality is not None:
entry.quality = payload.quality
try:
db.commit()
@@ -210,6 +227,8 @@ def add_to_inventory(
entry.quantity += payload.quantity
if payload.notes:
entry.notes = payload.notes
if payload.quality is not None:
entry.quality = payload.quality
db.commit()
created = False
@@ -235,6 +254,17 @@ def update_inventory_entry(
entry.notes = payload.notes
if payload.visibility is not None:
entry.visibility = payload.visibility
if "quality" in payload.model_fields_set:
# Explicit null clears the value; omitted keeps the existing one.
if payload.quality is not None:
item = catalog.store.by_class_name.get(entry.class_name)
if item is None:
raise HTTPException(
status_code=422,
detail=f"Quality does not apply to '{entry.class_name}'",
)
_validate_quality(item, payload.quality)
entry.quality = payload.quality
db.commit()
db.refresh(entry)