73 lines
2.3 KiB
Python
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
|