""" 소셜 SEO 관련 Pydantic 스키마 """ from typing import Literal, Optional from pydantic import BaseModel, ConfigDict, Field, model_validator class YoutubeDescriptionRequest(BaseModel): """유튜브 SEO Description 제안 요청""" content_type: Literal["video", "ssul"] = Field( default="video", description="콘텐츠 종류" ) video_id: Optional[int] = Field( None, description="ADO2 video.id 또는 썰박스 ssul_content.id" ) task_id: Optional[str] = Field( None, description="ADO2 작업 UUID. 썰박스는 ssul_content.id 문자열도 허용", ) @model_validator(mode="after") def require_identifier(self) -> "YoutubeDescriptionRequest": if self.video_id is None and not self.task_id: raise ValueError("video_id 또는 task_id 가 필요합니다.") return self model_config = ConfigDict( json_schema_extra={ "example": { "content_type": "video", "video_id": 123, } } ) class YoutubeDescriptionResponse(BaseModel): """유튜브 SEO Description 제안 응답""" title: str = Field(..., description="유튜브 영상 제목 - SEO/AEO 최적화") description: str = Field(..., description="제안된 유튜브 SEO Description") keywords: list[str] = Field(..., description="해시태그 리스트") model_config = ConfigDict( json_schema_extra={ "example": { "title": "여기에 더미 타이틀", "description": "여기에 더미 텍스트", "keywords": ["여기에", "더미", "해시태그"] } } )