TICKET-008 (backend): POST /api/foods/{id}/restore — idempotent, history intact

This commit is contained in:
Craig
2026-07-26 17:45:11 +01:00
parent ce91852321
commit 0c239cdbd4
3 changed files with 107 additions and 0 deletions
+15
View File
@@ -165,6 +165,21 @@ def delete_food(db: Session, food_id: int) -> FoodRead | None:
return FoodRead.model_validate(food)
def restore_food(db: Session, food_id: int) -> FoodRead | None:
"""Restore a soft-deleted food: clears deleted_at (spec §3.1).
Idempotent — restoring a live food just returns it. Returns None if not found."""
food = db.get(Food, food_id)
if food is None:
return None
if food.deleted_at is not None:
food.deleted_at = None
food.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.commit()
db.refresh(food)
return FoodRead.model_validate(food)
# ── Recent foods (TICKET-006) ────────────────────────────────────────────────