49 lines
2.4 KiB
Python
49 lines
2.4 KiB
Python
import httpx
|
|
from app.core import config
|
|
from app.core.localizer import localizer
|
|
from app.core.models.chat_models import PrivateChatListResponse, PrivateChatListData
|
|
|
|
async def get_private_chats(token: str, offset: int = 0, limit: int = 20):
|
|
"""
|
|
Получает список приватных чатов пользователя.
|
|
|
|
:param token: Токен доступа пользователя
|
|
:param offset: Смещение для пагинации
|
|
:param limit: Количество чатов для загрузки
|
|
:return: Кортеж (успех: bool, данные: PrivateChatListData | str)
|
|
"""
|
|
# TODO: Добавить логику обновления токена, как в auth_service.py
|
|
url = f"{config.BASE_URL}/v1/chat/private/list"
|
|
headers = {"Authorization": f"Bearer {token}"}
|
|
params = {"offset": offset, "limit": limit}
|
|
|
|
try:
|
|
async with httpx.AsyncClient(http2=True) as client:
|
|
response = await client.get(url, headers=headers, params=params)
|
|
print("response.status_code", response.status_code)
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
if data.get("status") == "fine":
|
|
# Используем Pydantic модель для парсинга ответа
|
|
response_model = PrivateChatListResponse(**data)
|
|
print("response_model.data", response_model.data)
|
|
return True, response_model.data
|
|
else:
|
|
return False, data.get("detail", localizer.translate("Неизвестная ошибка ответа"))
|
|
|
|
elif response.status_code in [401, 403]:
|
|
error_data = response.json()
|
|
return False, error_data.get("detail", localizer.translate("Ошибка аутентификации или авторизации"))
|
|
|
|
elif response.status_code == 422:
|
|
return False, localizer.translate("Некорректные параметры запроса")
|
|
|
|
else:
|
|
return False, f"{localizer.translate('Ошибка сервера')}: {response.status_code}"
|
|
|
|
except httpx.RequestError as e:
|
|
return False, f"{localizer.translate('Ошибка сети')}: {e}"
|
|
except Exception as e:
|
|
return False, f"{localizer.translate('Произошла ошибка')}: {e}"
|