o2o-castad-backend/app/sns/dependency.py

73 lines
2.3 KiB
Python

"""
SNS 모듈 전용 FastAPI 의존성
SNS 모듈에서만 사용하는 의존성을 정의합니다.
Facebook OAuth 관련 의존성을 포함합니다.
"""
from fastapi import Depends, HTTPException, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.database.session import get_session
from app.user.dependencies.auth import get_current_user
from app.user.models import Platform, SocialAccount, User
from app.utils.facebook_oauth import FacebookOAuthClient
from app.utils.logger import get_logger
logger = get_logger(__name__)
def get_facebook_oauth_client() -> FacebookOAuthClient:
"""
FacebookOAuthClient 인스턴스를 제공하는 의존성
Returns:
FacebookOAuthClient: Facebook OAuth API 클라이언트 인스턴스
"""
return FacebookOAuthClient()
async def get_facebook_social_account(
current_user: User = Depends(get_current_user),
session: AsyncSession = Depends(get_session),
) -> SocialAccount:
"""
현재 사용자의 활성 Facebook 소셜 계정을 조회하는 의존성
Args:
current_user: 현재 인증된 사용자
session: DB 세션
Returns:
SocialAccount: 활성 Facebook 소셜 계정
Raises:
HTTPException: Facebook 소셜 계정이 없는 경우 404 반환
"""
logger.debug(f"[SNS_DEP] Facebook 소셜 계정 조회 - user_uuid: {current_user.user_uuid}")
# SocialAccount에서 Facebook 활성 계정 조회
result = await session.execute(
select(SocialAccount).where(
SocialAccount.user_uuid == current_user.user_uuid,
SocialAccount.platform == Platform.FACEBOOK,
SocialAccount.is_active == True, # noqa: E712
SocialAccount.is_deleted == False, # noqa: E712
)
)
social_account = result.scalar_one_or_none()
if social_account is None:
logger.warning(f"[SNS_DEP] Facebook 계정 없음 - user_uuid: {current_user.user_uuid}")
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail={
"code": "FACEBOOK_ACCOUNT_NOT_FOUND",
"message": "연동된 Facebook 계정을 찾을 수 없습니다.",
},
)
logger.debug(f"[SNS_DEP] Facebook 소셜 계정 확인 - account_id: {social_account.id}")
return social_account