import httpx from app.core import config from app.core.localizer import localizer from app.core.http_client import authorized_get from app.core.models.search_models import SearchResponse, SearchData async def search_by_query(login: str, token: str, query: str): """ Поиск по строке: пользователи (префикс), далее можно расширить под группы/каналы/сообщения. :return: tuple (ok: bool, data: SearchData | str) """ url = f"{config.BASE_URL}/v1/feed/search" headers = {"Authorization": f"Bearer {token}"} params = {"query": query} try: response = await authorized_get(url, login=login, access_token=token, headers=headers, params=params) print("response.status_code", response.status_code) if response.status_code == 200: data = response.json() if data.get("status") == "fine": model = SearchResponse(**data) return True, model.data return False, data.get("detail", localizer.translate("Произошла ошибка")) if response.status_code in [401, 403]: error_data = response.json() return False, error_data.get("detail", localizer.translate("Недостаточно прав или неавторизован")) if response.status_code == 422: return False, localizer.translate("Некорректные параметры запроса") 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}"