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

122 lines
3.8 KiB
Python
Raw Normal View History

2025-12-17 15:37:32 +01:00
"""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
2025-12-25 07:44:52 +01:00
from app.models.analysis import SessionCreate, SessionResponse, SessionList, SessionUpdate
2025-12-17 15:37:32 +01:00
class DBApiClient(TgBackendInterface):
"""
Клиент для DB API сервиса.
Использует Pydantic схемы для type-safety.
2025-12-25 07:44:52 +01:00
Методы self.get(), self.post(), self.patch(), self.delete() от TgBackendInterface.
2025-12-17 15:37:32 +01:00
"""
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:
"""
2025-12-25 07:44:52 +01:00
PATCH {api_prefix}/users/{user_id}/settings
2025-12-17 15:37:32 +01:00
2025-12-25 07:44:52 +01:00
Частично обновить настройки пользователя.
Обновляются только переданные поля.
2025-12-17 15:37:32 +01:00
"""
2025-12-25 07:44:52 +01:00
return await self.patch(
2025-12-17 15:37:32 +01:00
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
)
2025-12-25 07:44:52 +01:00
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
)
2025-12-17 15:37:32 +01:00
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}")