53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""
|
|
소셜 SEO API 라우터
|
|
|
|
SEO 관련 엔드포인트를 제공합니다.
|
|
비즈니스 로직은 SeoService에 위임합니다.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database.session import get_session
|
|
from app.social.schemas import YoutubeDescriptionRequest, YoutubeDescriptionResponse
|
|
from app.social.services import seo_service
|
|
from app.user.dependencies import get_current_user
|
|
from app.user.models import User
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter(prefix="/seo", tags=["Social SEO"])
|
|
|
|
|
|
@router.post(
|
|
"/youtube",
|
|
response_model=YoutubeDescriptionResponse,
|
|
summary="유튜브 SEO description 생성",
|
|
description="유튜브 업로드 시 사용할 description을 SEO 적용하여 생성",
|
|
)
|
|
async def youtube_seo_description(
|
|
request_body: YoutubeDescriptionRequest,
|
|
current_user: User = Depends(get_current_user),
|
|
session: AsyncSession = Depends(get_session),
|
|
) -> YoutubeDescriptionResponse:
|
|
if request_body.content_type == "ssul":
|
|
content_id = request_body.video_id
|
|
if content_id is None:
|
|
try:
|
|
content_id = int(request_body.task_id)
|
|
except (TypeError, ValueError):
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail="썰박스 SEO 에는 video_id 또는 숫자 task_id 가 필요합니다.",
|
|
)
|
|
return await seo_service.get_ssul_seo(content_id, current_user, session)
|
|
|
|
return await seo_service.get_youtube_seo_description(
|
|
current_user,
|
|
session,
|
|
video_id=request_body.video_id,
|
|
task_id=request_body.task_id,
|
|
)
|