From 259b7337087518b8a043d55a4a7a3ed7f86461f1 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 1 Sep 2025 22:10:35 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20UUID=20=EB=B0=8F=20JWT=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EC=B2=B4=EA=B3=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 모든 내부 처리는 UUID 형식 통일 - JWT 토큰의 user_id 사용 명시 - PostgreSQL UUID 타입 캐스팅 추가 - Frontend API 호출 예시 추가 --- ...rb8001_chat_history_implementation_plan.md | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) 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 무한 스크롤 구현