from sqlalchemy.orm import Session from app.domain.models.video import Video from sqlalchemy.dialects.postgresql import UUID from app.repositories.base_repository import BaseRepository from typing import Optional class VideoRepository(BaseRepository[Video]): '''영상 레포지토리''' def __init__(self, db: Session): super().__init__(Video, db) def get_by_id(self, order_id: UUID) -> Optional[Video]: '''단일 주문 ID로 비디오 1건 조회''' return self.db.query(Video).filter( Video.order_id == order_id, Video.deleted == False ).first() def get_all_by_order_id(self, order_ids: list[UUID]) -> list[Video]: '''모든 주문의 영상 전체 조회''' if not order_ids: return [] return self.db.query(Video).filter( Video.order_id.in_(order_ids), Video.deleted == False ).all() def delete_by_video_id(self, video_id: UUID) -> bool: '''비디오 ID로 비디오 삭제 (소프트 삭제)''' # deleted=False 조건 없이 직접 조회 video = self.db.query(Video).filter( Video.id == video_id, Video.deleted == False # 이미 삭제된 것은 제외 ).first() if video: video.deleted = True # 소프트 삭제 self.db.commit() return True return False