bug today

This commit is contained in:
vrubelroman 2025-11-20 03:14:06 +03:00
parent faf6ec0c35
commit 4dc5539da2
5 changed files with 189 additions and 38 deletions

View file

@ -59,33 +59,39 @@ class LichessClient:
httpx.HTTPStatusError: При ошибках HTTP (кроме 404)
Exception: При других ошибках
"""
logger.info(f"🔍 LichessClient.get_user_activity: username={username}")
try:
# Rate limiting: ждем если нужно
await self.rate_limiter.wait_if_needed()
# Формируем URL для получения активности пользователя
url = f"{self.base_url}/user/{username}/activity"
logger.info(f"Запрос активности пользователя {username}")
logger.info(f"🔍 Making request to Lichess API: {url}")
# Выполняем HTTP GET запрос
response = await self.client.get(url)
logger.info(f"🔍 Lichess API response status: {response.status_code} for {username}")
response.raise_for_status() # Проверяем статус ответа
# Возвращаем JSON данные
return response.json()
result = response.json()
logger.info(f"🔍 Received activity data for {username}: {len(result) if isinstance(result, list) else 'not a list'} items")
return result
except httpx.HTTPStatusError as e:
if e.response.status_code == 404:
# Пользователь не найден - это нормальная ситуация
logger.warning(f"Пользователь {username} не найден")
logger.warning(f"⚠️ Пользователь {username} не найден (404)")
return None
else:
# Другие HTTP ошибки - логируем и пробрасываем
logger.error(f"HTTP ошибка при получении активности пользователя {username}: {e}")
logger.error(f"HTTP ошибка при получении активности пользователя {username}: status={e.response.status_code}, error={e}")
raise
except Exception as e:
# Обрабатываем все остальные ошибки
logger.error(f"Ошибка при получении активности пользователя {username}: {e}")
logger.error(f"❌ Ошибка при получении активности пользователя {username}: {e}")
import traceback
logger.error(traceback.format_exc())
raise
async def get_games_of_period(self, username: str, since_ms: int, until_ms: int, rated_only: bool = True) -> Optional[List[Dict[str, Any]]]:

View file

@ -213,29 +213,49 @@ class StatsService:
Returns:
ActivityResponse с данными статистики или сообщением об ошибке
"""
logger.info(f"🔍 StatsService.get_today_stats: username={username}")
try:
logger.info(f"🔍 Calling lichess_client.get_user_activity for {username}")
activity_data = await self.lichess_client.get_user_activity(username)
logger.info(f"🔍 Activity data received: {activity_data is not None}, type={type(activity_data)}")
if not activity_data:
logger.warning(f"⚠️ No activity data for {username}")
return ActivityResponse(
message=f"Пользователь {username} не найден или неактивен"
)
logger.info(f"🔍 Activity data length: {len(activity_data) if isinstance(activity_data, list) else 'not a list'}")
today = date.today()
logger.info(f"🔍 Looking for activity for today: {today}")
# Ищем активность за сегодня
# Lichess возвращает интервалы, которые могут начинаться вчера, но включать активность сегодня
today_activity = None
for activity in activity_data:
activity_date = self._parse_lichess_interval(activity['interval'])
if activity_date == today:
interval = activity['interval']
# Парсим начало и конец интервала
start_timestamp = interval['start'] / 1000
end_timestamp = interval['end'] / 1000
start_date = datetime.fromtimestamp(start_timestamp).date()
end_date = datetime.fromtimestamp(end_timestamp).date()
logger.debug(f"🔍 Checking activity interval: {start_date} to {end_date} vs today: {today}")
# Проверяем, попадает ли сегодняшняя дата в интервал
if start_date <= today <= end_date:
today_activity = activity
logger.info(f"✅ Found today activity for {username} (interval: {start_date} to {end_date})")
break
if not today_activity:
logger.info(f" No activity found for today ({today}) for {username}")
return ActivityResponse(
message=f"Активности за сегодняшний день ({today}) не было"
)
# Обрабатываем данные
logger.info(f"🔍 Processing activity data for {username}")
games_stats = self._process_games_by_mode(today_activity.get('games', {}))
tasks_stats = self._process_tasks(today_activity.get('puzzles', {}))
@ -245,13 +265,16 @@ class StatsService:
games=GamesStats(**games_stats)
)
logger.info(f"✅ Successfully processed stats for {username}")
return ActivityResponse(
message="Статистика за сегодняшний день",
data=user_stats
)
except Exception as e:
logger.error(f"Ошибка при получении статистики за сегодня: {e}")
logger.error(f"❌ Ошибка при получении статистики за сегодня для {username}: {e}")
import traceback
logger.error(traceback.format_exc())
return ActivityResponse(
message=f"Ошибка при получении статистики: {str(e)}"
)