o2o-castad-backend/app/video/api/routers/v1/video.py

109 lines
3.2 KiB
Python

"""
Video API Endpoints (Test)
프론트엔드 개발을 위한 테스트용 엔드포인트입니다.
"""
from datetime import datetime, timedelta
from typing import Optional
from fastapi import APIRouter
from pydantic import BaseModel, Field
router = APIRouter(prefix="/video", tags=["video"])
# =============================================================================
# Schemas
# =============================================================================
class VideoGenerateResponse(BaseModel):
"""영상 생성 응답 스키마"""
success: bool = Field(..., description="성공 여부")
task_id: str = Field(..., description="작업 고유 식별자")
message: str = Field(..., description="응답 메시지")
error_message: Optional[str] = Field(None, description="에러 메시지")
class VideoStatusResponse(BaseModel):
"""영상 상태 조회 응답 스키마"""
task_id: str = Field(..., description="작업 고유 식별자")
status: str = Field(..., description="처리 상태 (processing, completed, failed)")
video_url: Optional[str] = Field(None, description="영상 URL")
class VideoItem(BaseModel):
"""영상 아이템 스키마"""
task_id: str = Field(..., description="작업 고유 식별자")
video_url: str = Field(..., description="영상 URL")
created_at: datetime = Field(..., description="생성 일시")
class VideoListResponse(BaseModel):
"""영상 목록 응답 스키마"""
videos: list[VideoItem] = Field(..., description="영상 목록")
total: int = Field(..., description="전체 개수")
# =============================================================================
# Test Endpoints
# =============================================================================
TEST_VIDEO_URL = "https://ado2mediastoragepublic.blob.core.windows.net/ado2-media-public-access/ado2-media-original/dev-user-idx/dev-task-idx/1a584e86-6a74-417d-8cff-270ef60c8646.mp4"
@router.post(
"/generate/{task_id}",
summary="영상 생성 요청 (테스트)",
response_model=VideoGenerateResponse,
)
async def generate_video(task_id: str) -> VideoGenerateResponse:
"""영상 생성 요청 테스트 엔드포인트"""
return VideoGenerateResponse(
success=True,
task_id=task_id,
message="영상 생성 요청 성공",
error_message=None,
)
@router.get(
"/status/{task_id}",
summary="영상 상태 조회 (테스트)",
response_model=VideoStatusResponse,
)
async def get_video_status(task_id: str) -> VideoStatusResponse:
"""영상 상태 조회 테스트 엔드포인트"""
return VideoStatusResponse(
task_id=task_id,
status="completed",
video_url=TEST_VIDEO_URL,
)
@router.get(
"s/",
summary="영상 목록 조회 (테스트)",
response_model=VideoListResponse,
)
async def get_videos() -> VideoListResponse:
"""영상 목록 조회 테스트 엔드포인트"""
now = datetime.now()
videos = [
VideoItem(
task_id=f"test-task-id-{i:03d}",
video_url=TEST_VIDEO_URL,
created_at=now - timedelta(hours=i),
)
for i in range(10)
]
return VideoListResponse(
videos=videos,
total=len(videos),
)