# rb8001 카톡 스타일 대화 히스토리 구현 계획 ## 작성일: 2025-09-01 ## 대상: rb8001 (프로덕션 로빙) ## 참조: rb10508_micro 구현 코드 ## 수정: PostgreSQL 전용 히스토리 구현으로 변경 --- ## 현재 상태 분석 - **rb10508_micro**: /api/config 엔드포인트 구현됨 (endpoints.py:407) - **rb8001**: - database.py: ConversationLog 모델 있음 (line 52) - get_recent_conversations() 함수 있음 (line 81) - get_paginated_conversations() 함수 없음 (추가 필요) - main.py: @app.get() 직접 사용, router 분리 없음 ## 수정 필요 파일 ### 백엔드 (rb8001) 1. `app/core/config.py` - 환경변수 추가 (MESSAGE_BATCH_SIZE=30, MAX_MESSAGES_IN_DOM=200) 2. `app/state/database.py` - get_paginated_conversations() 함수 추가 - PostgreSQL conversation_logs 테이블에서만 조회 - ChromaDB 사용하지 않음 (히스토리는 DB만) 3. `main.py` - @app.get() 직접 추가 (/api/config, /api/messages) 4. `.env` 파일 - 환경변수 설정 (docker-compose.yml 아님) ### 프론트엔드 (frontend-customer) 1. `src/services/robeing-api.ts` - getConfig(), getMessages() 함수 추가 2. `src/components/chat-interface.tsx` - 무한 스크롤, 날짜 구분선 구현 --- ## API 스펙 ```typescript // GET /api/config { message_batch_size: 30, max_messages_in_dom: 200 } // GET /api/messages?before={timestamp}&limit=30 { messages: [...], // PostgreSQL conversation_logs에서 조회 has_more: true } ``` ### PostgreSQL 쿼리 예시 ```sql SELECT id, message, response, timestamp, user_id FROM conversation_logs WHERE user_id = $1 AND robeing_id = 'rb8001' AND timestamp < $2 ORDER BY timestamp DESC LIMIT 30; ``` --- ## 데이터베이스 스키마 ```sql -- conversation_logs 테이블 (실제) CREATE TABLE conversation_logs ( id INTEGER PRIMARY KEY (auto-increment), robeing_id VARCHAR, channel_id VARCHAR, message VARCHAR, response VARCHAR, intent VARCHAR, confidence DOUBLE PRECISION, timestamp TIMESTAMP, user_id UUID (FK → users), slack_user_id VARCHAR(100), thread_ts VARCHAR(128), channel_type VARCHAR(32) ); ``` --- ## 주의사항 ### API 경로 ```python # main.py에 직접 추가 (rb8001은 router 분리 없음) @app.get("/api/config") @app.get("/api/messages") ``` ### rb10508_micro 참조 코드 ```python # rb10508_micro/app/config.py:101-103 MESSAGE_BATCH_SIZE: int = int(os.getenv("MESSAGE_BATCH_SIZE", 30)) SCROLL_THRESHOLD: int = int(os.getenv("SCROLL_THRESHOLD", 100)) 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에 저장 필수 2. 프론트엔드 통합 (1시간) - robeing-api.ts 함수 추가 - chat-interface.tsx 무한 스크롤 구현 3. 테스트 및 배포 (30분) - curl localhost:8001/api/config 테스트 - 51124 서버 docker compose down && up -d --build