"""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}")