""" 소셜 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, )