fix: упростить логику подтверждения выигрыша - проверка владельца счёта вместо токена
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
2025-11-17 16:53:03 +09:00
parent ad7365f7f8
commit bb18ce30e4

View File

@@ -314,20 +314,6 @@ async def confirm_winner_callback(callback_query):
winner_id = int(callback_query.data.split("_")[-1])
async with async_session_maker() as session:
# Проверяем токен верификации
verification = await WinnerNotificationService.verify_token(
session,
winner_id,
callback_query.from_user.id
)
if not verification:
await callback_query.answer(
"❌ Токен недействителен или истек срок действия (24 часа)",
show_alert=True
)
return
# Получаем информацию о победителе
winner_result = await session.execute(
select(Winner).where(Winner.id == winner_id)
@@ -345,6 +331,26 @@ async def confirm_winner_callback(callback_query):
)
return
# Проверяем, что пользователь является владельцем счёта
if winner.account_number:
owner = await AccountService.get_account_owner(session, winner.account_number)
if not owner or owner.telegram_id != callback_query.from_user.id:
await callback_query.answer(
"❌ Вы не являетесь владельцем этого счёта",
show_alert=True
)
return
# Проверяем срок действия (24 часа с момента создания winner)
if winner.created_at:
time_since_creation = datetime.now(timezone.utc) - winner.created_at
if time_since_creation > timedelta(hours=24):
await callback_query.answer(
"❌ Срок подтверждения истёк (24 часа). Приз будет разыгран заново.",
show_alert=True
)
return
# Подтверждаем выигрыш
winner.is_confirmed = True
winner.confirmed_at = datetime.now(timezone.utc)