brief-rags-bench/app/interfaces/db_api_client.py

122 lines
3.8 KiB
Python

"""DB API client using TgBackendInterface."""
from app.interfaces.base import TgBackendInterface
from app.models.auth import LoginRequest, UserResponse
from app.models.settings import UserSettings, UserSettingsUpdate
from app.models.analysis import SessionCreate, SessionResponse, SessionList, SessionUpdate
class DBApiClient(TgBackendInterface):
"""
Клиент для DB API сервиса.
Использует Pydantic схемы для type-safety.
Методы self.get(), self.post(), self.patch(), self.delete() от TgBackendInterface.
"""
async def login_user(self, request: LoginRequest) -> UserResponse:
"""
POST {api_prefix}/users/login
Авторизация пользователя и запись логина.
"""
return await self.post("/users/login", body=request, response_model=UserResponse)
async def get_user_settings(self, user_id: str) -> UserSettings:
"""
GET {api_prefix}/users/{user_id}/settings
Получить настройки пользователя для всех окружений.
"""
return await self.get(f"/users/{user_id}/settings", response_model=UserSettings)
async def update_user_settings(
self,
user_id: str,
settings: UserSettingsUpdate
) -> UserSettings:
"""
PATCH {api_prefix}/users/{user_id}/settings
Частично обновить настройки пользователя.
Обновляются только переданные поля.
"""
return await self.patch(
f"/users/{user_id}/settings",
body=settings,
response_model=UserSettings
)
async def save_session(
self,
user_id: str,
session_data: SessionCreate
) -> SessionResponse:
"""
POST {api_prefix}/users/{user_id}/sessions
Сохранить сессию анализа.
"""
return await self.post(
f"/users/{user_id}/sessions",
body=session_data,
response_model=SessionResponse
)
async def get_sessions(
self,
user_id: str,
environment: str = None,
limit: int = 50,
offset: int = 0
) -> SessionList:
"""
GET {api_prefix}/users/{user_id}/sessions
Получить список сессий пользователя.
"""
params = {"limit": limit, "offset": offset}
if environment:
params["environment"] = environment
return await self.get(
f"/users/{user_id}/sessions",
params=params,
response_model=SessionList
)
async def get_session(self, user_id: str, session_id: str) -> SessionResponse:
"""
GET {api_prefix}/users/{user_id}/sessions/{session_id}
Получить конкретную сессию.
"""
return await self.get(
f"/users/{user_id}/sessions/{session_id}",
response_model=SessionResponse
)
async def update_session(
self,
user_id: str,
session_id: str,
update_data: SessionUpdate
) -> SessionResponse:
"""
PATCH {api_prefix}/users/{user_id}/sessions/{session_id}
Обновить аннотации сессии (например, после ревью).
"""
return await self.patch(
f"/users/{user_id}/sessions/{session_id}",
body=update_data,
response_model=SessionResponse
)
async def delete_session(self, user_id: str, session_id: str) -> dict:
"""
DELETE {api_prefix}/users/{user_id}/sessions/{session_id}
Удалить сессию.
"""
return await self.delete(f"/users/{user_id}/sessions/{session_id}")