o2o-castad-backend/app/social/schemas/seo_schema.py
김성경 fde48e8674 Merge branch 'main' into feature-ssulbox
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-19 15:25:13 +09:00

56 lines
1.7 KiB
Python

"""
소셜 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": ["여기에", "더미", "해시태그"]
}
}
)