43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
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 |