diff --git a/app/cabinet/routes/admin_promocodes.py b/app/cabinet/routes/admin_promocodes.py index 3c2f7d79..d262bc56 100644 --- a/app/cabinet/routes/admin_promocodes.py +++ b/app/cabinet/routes/admin_promocodes.py @@ -249,6 +249,18 @@ def _validate_create_payload(payload: PromoCodeCreateRequest) -> None: "Subscription days must be positive for this promo code type" ) + if payload.type == PromoCodeType.DISCOUNT: + if payload.balance_bonus_kopeks <= 0 or payload.balance_bonus_kopeks > 100: + raise HTTPException( + status.HTTP_400_BAD_REQUEST, + "Discount percent must be between 1 and 100" + ) + if payload.subscription_days <= 0: + raise HTTPException( + status.HTTP_400_BAD_REQUEST, + "Discount validity hours must be positive" + ) + if normalized_valid_from and normalized_valid_until and normalized_valid_from > normalized_valid_until: raise HTTPException( status.HTTP_400_BAD_REQUEST, @@ -289,6 +301,18 @@ def _validate_update_payload(payload: PromoCodeUpdateRequest, promocode: PromoCo "Subscription days must be positive for this promo code type" ) + if new_type == PromoCodeType.DISCOUNT: + if balance_bonus <= 0 or balance_bonus > 100: + raise HTTPException( + status.HTTP_400_BAD_REQUEST, + "Discount percent must be between 1 and 100" + ) + if subscription_days <= 0: + raise HTTPException( + status.HTTP_400_BAD_REQUEST, + "Discount validity hours must be positive" + ) + valid_from = ( _normalize_datetime(payload.valid_from) if payload.valid_from is not None