PMFlow/backend/app/api/account_settings_api/__init__.py

47 lines
1.5 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends
from fastapi.responses import JSONResponse
from sqlalchemy.ext.asyncio import AsyncSession
from ...core.database import get_db
from ...core.response import error_response, success_response
from ...dependencies import get_current_user
from ...models import User
from ...schemas.account_settings import AccountSettingsUpdateRequest
from ...services.account_settings_service import AccountSettingsService
router = APIRouter(prefix="/account-settings", tags=["account-settings"])
def _service(db: AsyncSession, current_user: User) -> AccountSettingsService:
return AccountSettingsService(db, tenant_id=int(current_user.tenant_id))
@router.get("/me")
async def get_my_account_settings(
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
settings = await _service(db, current_user).get_settings(user=current_user)
return success_response(settings.model_dump(mode="json"))
@router.put("/me")
async def update_my_account_settings(
body: AccountSettingsUpdateRequest,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
service = _service(db, current_user)
try:
settings = await service.update_settings(user=current_user, body=body)
except ValueError as exc:
await db.rollback()
return JSONResponse(status_code=400, content=error_response(400, str(exc)))
await db.commit()
return success_response(settings.model_dump(mode="json"))
__all__ = ["router"]