""" DB 트랜잭션 데코레이더 """ import functools from typing import Callable from extensions import custom_logger import settings logger = custom_logger(f"{settings.LOG_PREFIX}_db_decorator") _db = None def get_db(): """DB Lazy 로딩""" global _db if _db is None: from extensions import db _db = db return _db def transactional(f: Callable) -> Callable: """ 데이터 베이스 트랜잭션 관리하는 데코레이터 """ @functools.wraps(f) def decorated_function(*args, **kwargs): # DB 가져오기 db = get_db() try: # 함수 실행 result = f(*args, **kwargs) # 성공 시 커밋 db.session.commit() logger.debug(f"트랜잭션 커밋 완료 - {f.__name__}") return result except Exception as e: # 실패 시 롤백 db.session.rollback() logger.error(f"트랜잭션 롤백 - {f.__name__}: {str(e)}") raise return decorated_function