diff --git a/bot/services/promo_code_service.py b/bot/services/promo_code_service.py index 6ad7ede..5e477e8 100644 --- a/bot/services/promo_code_service.py +++ b/bot/services/promo_code_service.py @@ -34,7 +34,7 @@ class PromoCodeService: _ = lambda k, **kw: self.i18n.gettext(user_lang, k, **kw) code_input_upper = code_input.strip().upper() - promo_data = await promo_code_dal.get_active_promo_code_by_code_str( + promo_data = await promo_code_dal.get_active_bonus_promo_code_by_code_str( session, code_input_upper) if not promo_data: diff --git a/db/dal/promo_code_dal.py b/db/dal/promo_code_dal.py index e4025d6..0f6b174 100644 --- a/db/dal/promo_code_dal.py +++ b/db/dal/promo_code_dal.py @@ -43,6 +43,20 @@ async def get_active_promo_code_by_code_str( return result.scalar_one_or_none() +async def get_active_bonus_promo_code_by_code_str( + session: AsyncSession, code_str: str) -> Optional[PromoCode]: + """Get active bonus_days-type promo code by code string""" + stmt = select(PromoCode).where( + PromoCode.code == code_str.upper(), + PromoCode.promo_type == "bonus_days", + PromoCode.is_active == True, + PromoCode.current_activations < PromoCode.max_activations, + or_(PromoCode.valid_until == None, PromoCode.valid_until + > datetime.now(timezone.utc))) + result = await session.execute(stmt) + return result.scalar_one_or_none() + + async def get_active_discount_promo_code_by_code_str( session: AsyncSession, code_str: str) -> Optional[PromoCode]: """Get active discount-type promo code by code string"""