96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
"""
|
|
Settings API endpoints.
|
|
|
|
Управление настройками пользователя для всех трех окружений (IFT, PSI, PROD).
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from app.models.settings import UserSettings, UserSettingsUpdate
|
|
from app.interfaces.db_api_client import DBApiClient
|
|
from app.dependencies import get_db_client, get_current_user
|
|
import httpx
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter(prefix="/settings", tags=["settings"])
|
|
|
|
|
|
@router.get("", response_model=UserSettings)
|
|
async def get_settings(
|
|
current_user: dict = Depends(get_current_user),
|
|
db_client: DBApiClient = Depends(get_db_client)
|
|
):
|
|
"""
|
|
Получить настройки пользователя для всех окружений.
|
|
|
|
Returns:
|
|
UserSettings: Настройки пользователя для IFT, PSI, PROD
|
|
"""
|
|
user_id = current_user["user_id"]
|
|
|
|
try:
|
|
settings = await db_client.get_user_settings(user_id)
|
|
return settings
|
|
except httpx.HTTPStatusError as e:
|
|
if e.response.status_code == 404:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="User settings not found"
|
|
)
|
|
logger.error(f"Failed to get user settings: {e}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_502_BAD_GATEWAY,
|
|
detail="Failed to retrieve settings from DB API"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error getting user settings: {e}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail="Internal server error"
|
|
)
|
|
|
|
|
|
@router.put("", response_model=UserSettings)
|
|
async def update_settings(
|
|
settings_update: UserSettingsUpdate,
|
|
current_user: dict = Depends(get_current_user),
|
|
db_client: DBApiClient = Depends(get_db_client)
|
|
):
|
|
"""
|
|
Обновить настройки пользователя.
|
|
|
|
Args:
|
|
settings_update: Новые настройки для одного или нескольких окружений
|
|
|
|
Returns:
|
|
UserSettings: Обновленные настройки
|
|
"""
|
|
user_id = current_user["user_id"]
|
|
|
|
try:
|
|
updated_settings = await db_client.update_user_settings(user_id, settings_update)
|
|
return updated_settings
|
|
except httpx.HTTPStatusError as e:
|
|
if e.response.status_code == 404:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="User not found"
|
|
)
|
|
elif e.response.status_code == 400:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail="Invalid settings format"
|
|
)
|
|
logger.error(f"Failed to update user settings: {e}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_502_BAD_GATEWAY,
|
|
detail="Failed to update settings in DB API"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error updating user settings: {e}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail="Internal server error"
|
|
)
|