fix: упростить логику подтверждения выигрыша - проверка владельца счёта вместо токена
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
@@ -314,20 +314,6 @@ async def confirm_winner_callback(callback_query):
|
|||||||
winner_id = int(callback_query.data.split("_")[-1])
|
winner_id = int(callback_query.data.split("_")[-1])
|
||||||
|
|
||||||
async with async_session_maker() as session:
|
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(
|
winner_result = await session.execute(
|
||||||
select(Winner).where(Winner.id == winner_id)
|
select(Winner).where(Winner.id == winner_id)
|
||||||
@@ -345,6 +331,26 @@ async def confirm_winner_callback(callback_query):
|
|||||||
)
|
)
|
||||||
return
|
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.is_confirmed = True
|
||||||
winner.confirmed_at = datetime.now(timezone.utc)
|
winner.confirmed_at = datetime.now(timezone.utc)
|
||||||
|
|||||||
Reference in New Issue
Block a user