42 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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)
 | 
						|
 | 
						|
        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}"
 | 
						|
 |