47 lines
1.5 KiB
Python
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"]
|