fixed bot and server connectivity issues
This commit is contained in:
@@ -3,6 +3,7 @@ import aiohttp
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from tg_bot.config.settings import settings
|
||||
from tg_bot.infrastructure.http_client import create_http_session, normalize_backend_url
|
||||
|
||||
|
||||
class User:
|
||||
@@ -39,19 +40,22 @@ class UserService:
|
||||
"""Сервис для работы с пользователями через API бэкенда"""
|
||||
|
||||
def __init__(self):
|
||||
self.backend_url = settings.BACKEND_URL
|
||||
self.backend_url = normalize_backend_url(settings.BACKEND_URL)
|
||||
print(f"UserService initialized with BACKEND_URL: {self.backend_url}")
|
||||
|
||||
async def get_user_by_telegram_id(self, telegram_id: int) -> Optional[User]:
|
||||
"""Получить пользователя по Telegram ID"""
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(
|
||||
f"{self.backend_url}/users/telegram/{telegram_id}"
|
||||
) as response:
|
||||
url = f"{self.backend_url}/users/telegram/{telegram_id}"
|
||||
async with create_http_session() as session:
|
||||
async with session.get(url, ssl=False) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
return User(data)
|
||||
return None
|
||||
except aiohttp.ClientConnectorError as e:
|
||||
print(f"Backend not available at {self.backend_url}: {e}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"Error getting user: {e}")
|
||||
return None
|
||||
@@ -67,25 +71,43 @@ class UserService:
|
||||
user = await self.get_user_by_telegram_id(telegram_id)
|
||||
if not user:
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with create_http_session() as session:
|
||||
async with session.post(
|
||||
f"{self.backend_url}/users",
|
||||
json={"telegram_id": str(telegram_id), "role": "user"}
|
||||
json={"telegram_id": str(telegram_id), "role": "user"},
|
||||
ssl=False
|
||||
) as response:
|
||||
if response.status in [200, 201]:
|
||||
data = await response.json()
|
||||
return User(data)
|
||||
else:
|
||||
error_text = await response.text()
|
||||
raise Exception(
|
||||
f"Backend API returned status {response.status}: {error_text}. "
|
||||
f"Make sure the backend server is running at {self.backend_url}"
|
||||
)
|
||||
except aiohttp.ClientConnectorError as e:
|
||||
error_msg = (
|
||||
f"Cannot connect to backend API at {self.backend_url}. "
|
||||
f"Please ensure the backend server is running on port 8000. "
|
||||
f"Start it with: cd project/backend && python run.py"
|
||||
)
|
||||
print(f"Error creating user: {error_msg}")
|
||||
print(f"Original error: {e}")
|
||||
raise ConnectionError(error_msg) from e
|
||||
except Exception as e:
|
||||
print(f"Error creating user: {e}")
|
||||
error_msg = f"Error creating user: {e}. Backend URL: {self.backend_url}"
|
||||
print(error_msg)
|
||||
raise
|
||||
return user
|
||||
|
||||
async def update_user_questions(self, telegram_id: int) -> bool:
|
||||
"""Увеличить счетчик использованных вопросов"""
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with create_http_session() as session:
|
||||
async with session.post(
|
||||
f"{self.backend_url}/users/telegram/{telegram_id}/increment-questions"
|
||||
f"{self.backend_url}/users/telegram/{telegram_id}/increment-questions",
|
||||
ssl=False
|
||||
) as response:
|
||||
return response.status == 200
|
||||
except Exception as e:
|
||||
@@ -95,10 +117,11 @@ class UserService:
|
||||
async def activate_premium(self, telegram_id: int, days: int = 30) -> bool:
|
||||
"""Активировать premium статус"""
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with create_http_session() as session:
|
||||
async with session.post(
|
||||
f"{self.backend_url}/users/telegram/{telegram_id}/activate-premium",
|
||||
params={"days": days}
|
||||
params={"days": days},
|
||||
ssl=False
|
||||
) as response:
|
||||
return response.status == 200
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user