bug today
This commit is contained in:
parent
faf6ec0c35
commit
4dc5539da2
5 changed files with 189 additions and 38 deletions
|
|
@ -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]]]:
|
||||
|
|
|
|||
|
|
@ -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)}"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue