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

104 lines
3.2 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
class DBApiClient(TgBackendInterface):
"""
Клиент для DB API сервиса.
Использует Pydantic схемы для type-safety.
Методы self.get(), self.post(), self.put(), 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:
"""
PUT {api_prefix}/users/{user_id}/settings
Обновить настройки пользователя.
"""
return await self.put(
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 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}")