122 lines
3.8 KiB
Python
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}")
|