"""카카오톡 채널 연결 — 빌더에서 코드를 받아 채널에 한 번 입력한다.""" from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Response from common.models.gmodel import UserInfo from router.v1.validator.dependencies import IsValidAccessToken from services import kakao_link_service as service from services.kakao_link_service import KakaoLinkError router = APIRouter(prefix="/v1/agent/kakao", tags=["Agent"]) def private_response(response: Response): """코드가 오가는 응답이다 — 캐시·리퍼러·색인을 모두 막는다(social 라우터와 같은 규약).""" response.headers["Cache-Control"] = "no-store" response.headers["Referrer-Policy"] = "no-referrer" response.headers["X-Robots-Tag"] = "noindex, nofollow" @router.get("/link") async def link_state(response: Response, user: UserInfo = Depends(IsValidAccessToken)): """연결 상태.""" private_response(response) return await service.state(UUID(user.user_id)) @router.post("/link/code") async def issue_code(response: Response, user: UserInfo = Depends(IsValidAccessToken)): """일회용 코드를 낸다.""" private_response(response) try: return await service.issue_code(UUID(user.user_id)) except KakaoLinkError as ex: raise HTTPException(409, str(ex)) from ex @router.post("/link/disconnect") async def disconnect(response: Response, user: UserInfo = Depends(IsValidAccessToken)): private_response(response) try: await service.disconnect(UUID(user.user_id)) except KakaoLinkError as ex: raise HTTPException(409, str(ex)) from ex return {"disconnected": True}