2025-05-26 16:59:35 +09:00

59 lines
2.0 KiB
Python

# app/api/user.py
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.logger import logger
import traceback
import sys
from sqlalchemy.orm import Session
from app.schemas.user import UserCreate, UserResponse, PasswordUpdateRequest
from app.crud.user import create_user
from app.models.user import User
from app.core.database import SessionLocal
from app.core.deps import get_current_user
from app.core.security import verify_password, get_password_hash
router = APIRouter()
# DB 세션 주입 함수
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.post("/", response_model=UserResponse)
def register_user(user_create: UserCreate, db: Session = Depends(get_db)):
return create_user(db, user_create)
@router.get("/me", response_model=UserResponse)
def get_my_profile(current_user: User = Depends(get_current_user)):
return current_user
@router.put("/me/password", status_code=204)
def update_password(
pw_req: PasswordUpdateRequest,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
try:
if not verify_password(pw_req.current_password, current_user.password_hash):
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="현재 비밀번호가 일치하지 않습니다."
)
print("기존:", current_user.password_hash)
print("신규:", get_password_hash(pw_req.new_password))
current_user = db.merge(current_user) # 세션에 붙임
current_user.password_hash = get_password_hash(pw_req.new_password)
db.flush()
db.expunge(current_user)
print("✅ flush 완료됨. 커밋 시도 중...")
db.commit()
print("✅ 커밋 완료됨.")
except Exception as e:
logger.error(f"❌ 비밀번호 변경 중 예외 발생: {e}")
traceback.print_exc(file=sys.stdout) # ← 여기가 핵심
raise