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