diff --git a/plans/250901_rb8001_chat_history_implementation_plan.md b/plans/250901_rb8001_chat_history_implementation_plan.md index 79d5d95..0515c20 100644 --- a/plans/250901_rb8001_chat_history_implementation_plan.md +++ b/plans/250901_rb8001_chat_history_implementation_plan.md @@ -15,6 +15,12 @@ - get_paginated_conversations() 함수 없음 (추가 필요) - main.py: @app.get() 직접 사용, router 분리 없음 +## UUID 및 인증 체계 +- **내부 처리**: 모든 user_id는 UUID 형식으로 통일 +- **JWT 토큰**: X-User-Id 헤더로 UUID 전달 +- **Slack 사용자**: slack_user_mapping 테이블로 UUID 매핑 +- **Frontend**: JWT에서 user_id(UUID) 추출하여 API 호출 + ## 수정 필요 파일 ### 백엔드 (rb8001) @@ -46,15 +52,27 @@ ### PostgreSQL 쿼리 예시 ```sql +-- user_id는 항상 UUID 형식 SELECT id, message, response, timestamp, user_id FROM conversation_logs -WHERE user_id = $1 +WHERE user_id = $1::uuid -- UUID 타입 캐스팅 AND robeing_id = 'rb8001' AND timestamp < $2 ORDER BY timestamp DESC LIMIT 30; ``` +### API 호출 예시 +```javascript +// Frontend에서 JWT의 user_id 사용 +const token = localStorage.getItem('token'); +const decoded = jwt_decode(token); +const userId = decoded.user_id; // UUID 형식 + +// API 호출 +await fetch(`/api/messages?user_id=${userId}&before=${timestamp}`); +``` + --- ## 데이터베이스 스키마 @@ -99,9 +117,9 @@ MAX_MESSAGES_IN_DOM: int = int(os.getenv("MAX_MESSAGES_IN_DOM", 200)) ### 구현 순서 1. 백엔드 API 추가 (1시간) - config.py 환경변수 추가 - - database.py에 get_paginated_conversations() 구현 (PostgreSQL 전용) - - main.py에 엔드포인트 직접 추가 - - 현재 대화는 save_conversation()으로 PostgreSQL에 저장 필수 + - database.py에 get_paginated_conversations() 구현 (PostgreSQL 전용, UUID 처리) + - main.py에 엔드포인트 직접 추가 (JWT 인증 확인) + - 현재 대화는 save_conversation()으로 PostgreSQL에 저장 (UUID로 저장) 2. 프론트엔드 통합 (1시간) - robeing-api.ts 함수 추가 - chat-interface.tsx 무한 스크롤 구현