diff --git a/troubleshooting/250916_happybell80_slack_user_uuid_mapping_failure.md b/troubleshooting/250916_happybell80_slack_user_uuid_mapping_failure.md index 760422b..d80ceb8 100644 --- a/troubleshooting/250916_happybell80_slack_user_uuid_mapping_failure.md +++ b/troubleshooting/250916_happybell80_slack_user_uuid_mapping_failure.md @@ -14,30 +14,37 @@ null value in column "user_id" violates not-null constraint ### 로그 확인 내역 - rb8001 서비스: Slack ID → UUID 매핑 실패 WARNING -- robeing-gateway: JWT의 username 필드가 None -- 사용자: 김종태 (goeun2dc@gmail.com) - Slack OAuth 인증 +- robeing-gateway: JWT에서 sub 또는 user_id를 읽어 user_uuid로 사용 +- 사용자: 김종태 (goeun2dc@gmail.com) - Google OAuth로 가입 후 Slack OAuth 인증 ## 현재 코드 상태 ### robeing-gateway -- /home/happybell/projects/ivada/robeing-gateway/app/main.py:544행 -- `slack_user_to_uuid(team_id, slack_user_id)` 호출 -- 반환값이 None일 때 user_id NULL 에러 발생 +- /home/happybell/projects/ivada/robeing-gateway/app/main.py:544행 - slack_user_to_uuid() 호출 +- /home/happybell/projects/ivada/robeing-gateway/app/database.py:360-388행 - slack_user_to_uuid() 구현 +- slack_user_to_uuid() 결과가 None이면 X-User-Id 헤더 생략하여 rb8001로 프록시 ### DB 스키마 -- user 테이블: id (UUID), username, email, slack_user_id, slack_team_id -- conversation_log 등 테이블: user_id NOT NULL 제약 +- user 테이블: id, team_id, email, name, oauth_provider, oauth_id, username (slack_user_id 컬럼 없음) +- SlackWorkspace 테이블: slack_team_id, bot_token, team_id (별도 테이블) +- conversation_log 테이블: user_id Column(String) - Nullable 허용 ## 관련 파일 -- robeing-gateway/app/main.py: slack_user_to_uuid() 함수 -- robeing-gateway/app/db/: DB 쿼리 로직 -- rb8001: Slack 메시지 처리 시 user_id 필요 +- robeing-gateway/app/database.py: slack_user_to_uuid() 함수 구현 +- rb8001/app/state/database.py: ConversationLog 모델 정의 +- rb8001: UUID 없으면 Slack ID 보존, PostgreSQL 저장 시 user_id NULL로 저장 가능 -## 영향 범위 -- Slack 메시지 저장 불가 -- 대화 히스토리 누락 -- 사용자별 컨텍스트 관리 실패 +## 근본 원인 +- Google OAuth로 먼저 가입한 사용자의 oauth_id가 NULL +- Slack OAuth 로그인 시 이메일로 기존 사용자 찾지만 oauth_id 업데이트 안 함 +- slack_user_to_uuid() 함수가 oauth_id='slack_user_id' AND oauth_provider='slack' 조건으로 검색 실패 + +## 해결 방안 +- auth-server의 Slack 로그인 처리 시 기존 사용자의 oauth_id/oauth_provider 업데이트 필요 +- 파일: /home/happybell/projects/ivada/auth-server/app/providers/slack.py:282-286행 +- 이메일로 기존 사용자 찾았을 때 oauth_id를 Slack User ID로, oauth_provider를 'slack'으로 업데이트 ## 현재 상태 -- 미해결 -- Slack OAuth 직접 인증 사용 중 (auth-server 경유 안함) \ No newline at end of file +- **해결됨** (2025-09-16) +- auth-server/app/providers/slack.py:286-289행에 oauth_id 업데이트 코드 추가 +- 이메일로 찾은 기존 사용자의 oauth_id와 oauth_provider를 Slack 정보로 업데이트 \ No newline at end of file