Add quantity in reserve_gift_item endpoint

This commit is contained in:
2025-03-16 16:33:17 +01:00
parent 4363e27ae6
commit 88c9e634de
2 changed files with 26 additions and 8 deletions

View File

@@ -854,11 +854,13 @@ def reserve_gift_item(
db: Session = Depends(get_db),
item_id: UUID = Path(...),
guest_id: UUID,
quantity: Optional[int] = 1,
notes: Optional[str] = None,
current_user: Optional[User] = Depends(get_current_user)
) -> Any:
"""
Reserve a gift item for a guest.
Reserve a gift item for a guest with specified quantity.
Default quantity is 1 if not provided.
"""
gift = gift_item_crud.get(db, id=item_id)
if not gift:
@@ -868,6 +870,15 @@ def reserve_gift_item(
if gift.status != GiftStatus.AVAILABLE:
raise HTTPException(status_code=400, detail="Gift is not available for reservation")
# Validate quantity
if quantity <= 0:
raise HTTPException(status_code=400, detail="Quantity must be a positive number")
# Check if requested quantity is valid
if quantity > gift.remaining_quantity:
raise HTTPException(status_code=400,
detail=f"Requested quantity ({quantity}) exceeds available quantity ({gift.remaining_quantity})")
# Check if guest exists
guest = guest_crud.get(db, id=guest_id)
if not guest:
@@ -879,7 +890,7 @@ def reserve_gift_item(
# For admin users, allow direct reservation
if current_user:
return gift_item_crud.reserve_gift(db, gift_id=item_id, guest_id=guest_id, notes=notes)
return gift_item_crud.reserve_gift(db, gift_id=item_id, guest_id=guest_id, quantity=quantity, notes=notes)
# For public users, additional validation
# Check if event is public
@@ -887,8 +898,7 @@ def reserve_gift_item(
if not event or not event.is_public:
raise HTTPException(status_code=403, detail="Not enough permissions")
return gift_item_crud.reserve_gift(db, gift_id=item_id, guest_id=guest_id, notes=notes)
return gift_item_crud.reserve_gift(db, gift_id=item_id, guest_id=guest_id, quantity=quantity, notes=notes)
@router.post("/items/{item_id}/cancel-reservation", response_model=GiftItem, operation_id="cancel_gift_reservation")
def cancel_gift_reservation(