Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 2,070 Bytes
83d49b9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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()
@router.patch("/me", response_model=UserResponse)
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
|