""" Dashboard Background Tasks 업로드 완료 시 Dashboard 테이블에 레코드를 삽입하는 백그라운드 태스크입니다. """ import logging from sqlalchemy import select from sqlalchemy.dialects.mysql import insert from app.dashboard.models import Dashboard from app.database.session import BackgroundSessionLocal from app.social.models import SocialUpload from app.user.models import SocialAccount logger = logging.getLogger(__name__) async def insert_dashboard(upload_id: int) -> None: """ Dashboard 레코드 삽입 SocialUpload(id=upload_id) 완료 데이터를 DB에서 조회하여 Dashboard에 삽입합니다. UniqueConstraint(platform_video_id, platform_user_id) 충돌 시 스킵(INSERT IGNORE). """ try: async with BackgroundSessionLocal() as session: result = await session.execute( select( SocialUpload.user_uuid, SocialUpload.platform, SocialUpload.platform_video_id, SocialUpload.platform_url, SocialUpload.title, SocialUpload.uploaded_at, SocialAccount.platform_user_id, ) .join(SocialAccount, SocialUpload.social_account_id == SocialAccount.id) .where(SocialUpload.id == upload_id) ) row = result.one_or_none() if not row: logger.warning(f"[dashboard] upload_id={upload_id} 데이터 없음") return stmt = ( insert(Dashboard) .values( user_uuid=row.user_uuid, platform=row.platform, platform_user_id=row.platform_user_id, platform_video_id=row.platform_video_id, platform_url=row.platform_url, title=row.title, uploaded_at=row.uploaded_at, ) .prefix_with("IGNORE") ) await session.execute(stmt) await session.commit() logger.info( f"[dashboard] 삽입 완료 - " f"upload_id={upload_id}, platform_video_id={row.platform_video_id}" ) except Exception as e: logger.error( f"[dashboard] 삽입 실패 - upload_id={upload_id}, error={e}" )