diff --git a/troubleshooting/250831_slack_login_workspace_assignment_issue.md b/troubleshooting/250831_slack_login_workspace_assignment_issue.md index 21654db..e43a502 100644 --- a/troubleshooting/250831_slack_login_workspace_assignment_issue.md +++ b/troubleshooting/250831_slack_login_workspace_assignment_issue.md @@ -40,21 +40,23 @@ Slack OAuth로 로그인한 사용자가 Robeing 워크스페이스에 자동 --- -## 3. 데이터베이스 구조 문제 +## 3. 데이터베이스 구조 분석 -### 두 종류의 워크스페이스 테이블 (독립적) +### 핵심 개념: team_id = workspace_id -#### slack_workspaces (Slack 팀 정보) +- **Slack team_id**: Slack 워크스페이스의 고유 ID (T로 시작) +- **workspace_members.workspace_id**: team_id를 저장하는 필드 +- **즉, team_id가 그대로 workspace_id로 사용됨** + +#### slack_workspaces 테이블 - **용도**: Slack 앱 설치 정보 저장 -- **주요 컬럼**: team_id (Slack ID), team_name, bot_token, company_id +- **주요 컬럼**: team_id (Slack ID), team_name, bot_token - **현재 데이터**: GoodGang Labs (T035VFRKCN6), test (T097FCTDVEX) -#### workspaces (Robeing 서비스) -- **용도**: Robeing 서비스 할당 -- **주요 컬럼**: name, subdomain, robeing_id, robeing_port, robeing_url -- **현재 데이터**: ivada-robeing (rb10508_micro, port 10508) - -**문제점**: 두 테이블 간 연결 관계 없음 (Foreign Key 없음) +#### workspace_members 테이블 +- **용도**: 사용자와 Slack 워크스페이스 연결 +- **주요 컬럼**: user_id, workspace_id (=team_id), robeing_id +- **문제**: Slack 로그인 시 자동 추가 안 됨 ### 처리 흐름 | 테이블 | 용도 | 상태 | @@ -62,8 +64,7 @@ Slack OAuth로 로그인한 사용자가 Robeing 워크스페이스에 자동 | users | 사용자 정보 | ✅ 생성됨 | | slack_user_mapping | Slack ID ↔ UUID | ✅ 생성됨 | | slack_workspaces | Slack 팀 정보 | ✅ 조회됨 | -| workspaces | **Robeing 워크스페이스** | ❌ 연결 안 됨 | -| workspace_members | **Robeing 멤버십** | ❌ 추가 안 됨 | +| workspace_members | **사용자-워크스페이스 멤버십** | ❌ 추가 안 됨 | --- @@ -77,5 +78,31 @@ Slack OAuth로 로그인한 사용자가 Robeing 워크스페이스에 자동 ## 5. 해결 방안 -1. **즉시 조치**: 수동으로 workspace_members 추가 -2. **장기 개선**: Slack 로그인 시 자동 워크스페이스 할당 로직 구현 \ No newline at end of file +### 수정 필요 코드 (`/home/admin/auth-server/app/providers/slack.py`) + +304번 줄 이후 추가: +```python +# workspace_members 추가 (team_id = workspace_id) +if team_id and user: + db.execute(text(""" + INSERT INTO workspace_members (user_id, workspace_id, robeing_id) + VALUES (:user_id, :workspace_id, :robeing_id) + ON CONFLICT (user_id, workspace_id) DO UPDATE + SET robeing_id = :robeing_id + """), { + "user_id": user.id, + "workspace_id": team_id, # team_id가 그대로 workspace_id + "robeing_id": "rb8001" # 또는 조건에 따라 rb10508 + }) +``` + +### 수동 해결 SQL +```sql +-- happybell80 사용자 workspace_members 추가 +INSERT INTO workspace_members (user_id, workspace_id, robeing_id) +VALUES ( + '1e16e9d5-59f3-54da-a661-8abeabff4230', -- happybell80 user_id + 'T035VFRKCN6', -- GoodGang Labs team_id + 'rb8001' +); +``` \ No newline at end of file