109 lines
3.2 KiB
Python
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),
|
|
)
|