eb4645314d
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
feat: 成片中心后端升级(封面生成/复核/批量下载)
90 lines
3.4 KiB
Python
Executable File
90 lines
3.4 KiB
Python
Executable File
from __future__ import annotations
|
|
|
|
from packages.domain import GeneratedVideo
|
|
from packages.ports.generated_video_repository import GeneratedVideoRepository
|
|
|
|
|
|
class ListGeneratedVideosUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, project_id: str) -> list[GeneratedVideo]:
|
|
if not project_id.strip():
|
|
raise ValueError("project_id 不能为空")
|
|
return self.generated_video_repository.list_by_project(project_id.strip())
|
|
|
|
|
|
class ListGeneratedVideosPaginatedUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(
|
|
self,
|
|
*,
|
|
project_id: str | None = None,
|
|
status: str | None = None,
|
|
review_status: str | None = None,
|
|
page: int = 1,
|
|
page_size: int = 20,
|
|
) -> tuple[list[GeneratedVideo], int]:
|
|
if page < 1:
|
|
page = 1
|
|
if page_size < 1 or page_size > 100:
|
|
page_size = 20
|
|
return self.generated_video_repository.list_paginated(
|
|
project_id=project_id,
|
|
status=status,
|
|
review_status=review_status,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
|
|
|
|
class GetGeneratedVideoUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, video_id: str) -> GeneratedVideo | None:
|
|
return self.generated_video_repository.get(video_id)
|
|
|
|
|
|
class ListGeneratedVideosByTaskUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, generation_task_id: str) -> list[GeneratedVideo]:
|
|
if not generation_task_id.strip():
|
|
raise ValueError("generation_task_id 不能为空")
|
|
return self.generated_video_repository.list_by_generation_task(generation_task_id.strip())
|
|
|
|
|
|
class GetGeneratedVideoDownloadUrlUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, video_id: str) -> str | None:
|
|
item = self.generated_video_repository.get(video_id)
|
|
if item is None:
|
|
return None
|
|
return item.file_url
|
|
|
|
|
|
class UpdateVideoReviewStatusUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, video_id: str, review_status: str) -> GeneratedVideo | None:
|
|
if not video_id.strip():
|
|
raise ValueError("video_id 不能为空")
|
|
if review_status not in ("pending_review", "approved", "rejected"):
|
|
raise ValueError(f"无效的 review_status: {review_status}")
|
|
return self.generated_video_repository.update_review_status(video_id.strip(), review_status)
|
|
|
|
|
|
class GetVideosByIdsUseCase:
|
|
def __init__(self, generated_video_repository: GeneratedVideoRepository):
|
|
self.generated_video_repository = generated_video_repository
|
|
|
|
def execute(self, video_ids: list[str]) -> list[GeneratedVideo]:
|
|
return self.generated_video_repository.get_by_ids(video_ids)
|