62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
from sqlalchemy.orm import Session
|
|
from app.domain.models.user import User
|
|
from .base_repository import BaseRepository
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
|
|
class UserRepository(BaseRepository[User]):
|
|
'''사용자 레포지토리'''
|
|
|
|
def __init__(self, db: Session):
|
|
super().__init__(User, db)
|
|
|
|
def get_by_user_id(self, user_id: str) -> User:
|
|
'''사용자 ID로 사용자 조회'''
|
|
return self.db.query(User).filter(
|
|
User.user_id == user_id,
|
|
User.deleted == False
|
|
).first()
|
|
|
|
|
|
def exists_by_user_id(self, user_id: str) -> bool:
|
|
'''사용자 ID가 존재하는지 확인'''
|
|
return self.db.query(User).filter(
|
|
User.user_id == user_id,
|
|
User.deleted == False
|
|
).first() is not None
|
|
|
|
def get_name_by_user_id(self, user_id: UUID) -> str | None:
|
|
'''사용자 ID로 사용자 이름(name) 조회'''
|
|
result = self.db.query(User.name).filter(
|
|
User.id == user_id,
|
|
User.deleted == False
|
|
).first()
|
|
|
|
return result[0] if result else None
|
|
|
|
|
|
def update_name_by_user_id(self, user_id: UUID, new_name: str) -> bool:
|
|
user = self.get_by_id(user_id) # ✅ UUID(PK) 기준으로 조회
|
|
if not user:
|
|
return False
|
|
user.name = new_name
|
|
self.db.commit()
|
|
self.db.refresh(user)
|
|
return True
|
|
|
|
def get_by_user_uuid(self, user_id: UUID):
|
|
'''사용자 UUID로 사용자 조회'''
|
|
return self.db.query(User.id).filter(
|
|
User.id == user_id,
|
|
User.deleted == False
|
|
).first()
|
|
|
|
|
|
def update_user(self, id: UUID, update_data: dict) -> User:
|
|
user = self.get_by_id(id)
|
|
if not user:
|
|
return None
|
|
for field, value in update_data.items():
|
|
setattr(user, field, value)
|
|
self.db.commit()
|
|
self.db.refresh(user)
|
|
return user |