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

This commit is contained in:
2025-11-17 16:11:03 +09:00
parent bd068d8a79
commit 610d617602
2 changed files with 19 additions and 1 deletions

View File

@@ -264,10 +264,16 @@ class LotteryService:
@staticmethod
async def conduct_draw(session: AsyncSession, lottery_id: int) -> Dict[int, Dict[str, Any]]:
"""Провести розыгрыш с учетом ручных победителей"""
import logging
logger = logging.getLogger(__name__)
logger.info(f"conduct_draw: начало для lottery_id={lottery_id}")
lottery = await LotteryService.get_lottery(session, lottery_id)
if not lottery or lottery.is_completed:
logger.warning(f"conduct_draw: lottery не найден или завершён")
return {}
logger.info(f"conduct_draw: получаем участников")
# Получаем всех участников (включая тех, у кого нет user)
participants = []
for p in lottery.participations:
@@ -282,7 +288,9 @@ class LotteryService:
'account_number': p.account_number
})())
logger.info(f"conduct_draw: участников {len(participants)}")
if not participants:
logger.warning(f"conduct_draw: нет участников")
return {}
# Определяем количество призовых мест
@@ -336,6 +344,7 @@ class LotteryService:
session.add(winner)
# Обновляем статус розыгрыша
logger.info(f"conduct_draw: обновляем статус lottery")
lottery.is_completed = True
lottery.draw_results = {}
for place, info in results.items():
@@ -349,7 +358,9 @@ class LotteryService:
'is_manual': info['is_manual']
}
logger.info(f"conduct_draw: коммитим изменения")
await session.commit()
logger.info(f"conduct_draw: успешно завершено, победителей: {len(results)}")
return results
@staticmethod

View File

@@ -2701,7 +2701,14 @@ async def conduct_lottery_draw(callback: CallbackQuery):
await callback.answer("⏳ Проводится розыгрыш...", show_alert=True)
# Проводим розыгрыш через сервис
logger.info(f"Начинаем проведение розыгрыша {lottery_id}")
try:
winners_dict = await LotteryService.conduct_draw(session, lottery_id)
logger.info(f"Розыгрыш {lottery_id} проведён, победителей: {len(winners_dict)}")
except Exception as e:
logger.error(f"Ошибка при проведении розыгрыша {lottery_id}: {e}", exc_info=True)
await callback.answer(f"❌ Ошибка: {e}", show_alert=True)
return
if winners_dict:
# Отправляем уведомления победителям