Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| import uuid | |
| from typing import Optional | |
| from fastapi import APIRouter, Depends, UploadFile, File, Form, BackgroundTasks | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from app.api import deps | |
| from app.schemas.user import UserResponse | |
| from app.services.storage_service import storage_service | |
| from app.crud import user as user_crud | |
| router = APIRouter() | |
| async def update_user_me( | |
| background_tasks: BackgroundTasks, | |
| first_name: Optional[str] = Form(None), | |
| last_name: Optional[str] = Form(None), | |
| avatar: Optional[UploadFile] = File(None), | |
| current_user=Depends(deps.get_current_active_user), | |
| db: AsyncSession = Depends(deps.get_db), | |
| ): | |
| """ | |
| อัปเดตข้อมูลโปรไฟล์ผู้ใช้งาน (ส่งเฉพาะข้อมูลที่ต้องการเปลี่ยนได้) | |
| """ | |
| user_id = current_user["id"] | |
| if first_name is not None or last_name is not None: | |
| new_first = first_name if first_name is not None else current_user["first_name"] | |
| new_last = last_name if last_name is not None else current_user["last_name"] | |
| await user_crud.update_user_name( | |
| db, user_id=user_id, first_name=new_first, last_name=new_last | |
| ) | |
| if avatar is not None: | |
| old_avatar_url = current_user["profile_image_url"] | |
| file_content = await avatar.read() | |
| unique_filename = f"{uuid.uuid4().hex}_{avatar.filename}" | |
| new_avatar_url = await storage_service.upload_file( | |
| file_content=file_content, | |
| file_name=unique_filename, | |
| content_type=avatar.content_type, | |
| folder="profiles", | |
| ) | |
| await user_crud.update_user_profile_image( | |
| db, user_id=user_id, profile_image_url=new_avatar_url | |
| ) | |
| if old_avatar_url: | |
| background_tasks.add_task(storage_service.delete_file, old_avatar_url) | |
| updated_user = await user_crud.get_user_by_id(db, user_id=user_id) | |
| return updated_user | |