docs: PostgreSQL 테이블 변경 계획 누락 사항 추가

- gmail_tokens: username 컬럼 및 token_data(JSON) 병행 사용 명시
- users: provider/provider_id vs oauth_provider/oauth_id 차이 명시
- workspace_members: role 타입 차이 (Enum vs String) 명시
- slack_user_mapping: 완전한 제약조건 (UNIQUE, FK) 명시
- 위험 요소에 모델 불일치 상세 내용 추가
This commit is contained in:
happybell80 2025-09-10 21:30:36 +09:00
parent ce1a2a92e4
commit 55e2b7e103

View File

@ -26,8 +26,8 @@
### 2.1 users 테이블 ### 2.1 users 테이블
**컬럼**: **컬럼**:
- auth-server 모델: id(UUID), username, email, name, **picture**, oauth_provider, oauth_id, is_active, created_at, updated_at, last_login_at - auth-server 모델: id(UUID), username, email, name, **picture**, **oauth_provider**, **oauth_id**, is_active, created_at, updated_at, last_login_at
- robeing-gateway 모델: id(UUID), username, email, name, **avatar_url**, oauth_provider, oauth_id, is_active, created_at, updated_at, last_login_at - robeing-gateway 모델: id(UUID), email, name, **avatar_url**, **provider**, **provider_id**, created_at, updated_at (username 없음)
| 파일 경로 | 라인 번호 | 작업 내용 | | 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------| |-----------|-----------|-----------|
@ -53,6 +53,7 @@
### 2.3 workspace_members 테이블 ### 2.3 workspace_members 테이블
**컬럼**: id(UUID), workspace_id(FK), user_id(FK), role, robeing_id, robeing_url, is_active, joined_at, updated_at **컬럼**: id(UUID), workspace_id(FK), user_id(FK), role, robeing_id, robeing_url, is_active, joined_at, updated_at
**주의**: role 타입이 auth-server는 Enum(UserRole), robeing-gateway는 String(50)
| 파일 경로 | 라인 번호 | 작업 내용 | | 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------| |-----------|-----------|-----------|
@ -65,8 +66,8 @@
| robeing-gateway/app/models.py | 46-60 | 테이블 모델 정의 | | robeing-gateway/app/models.py | 46-60 | 테이블 모델 정의 |
### 2.4 slack_user_mapping 테이블 ### 2.4 slack_user_mapping 테이블
**컬럼**: slack_user_id, slack_workspace_id, user_id **컬럼**: slack_user_id, slack_workspace_id, user_id, created_at, updated_at
**주의**: (slack_user_id, slack_workspace_id) 조합이 고유 키 **제약조건**: UNIQUE(slack_user_id, slack_workspace_id), FK(user_id → users.id), FK(slack_workspace_id → slack_workspaces.id)
| 파일 경로 | 라인 번호 | 작업 내용 | | 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------| |-----------|-----------|-----------|
@ -87,7 +88,8 @@
| robeing-gateway/app/main.py | 567-570 | SELECT bot_token FROM slack_workspaces WHERE team_id = $1 | | robeing-gateway/app/main.py | 567-570 | SELECT bot_token FROM slack_workspaces WHERE team_id = $1 |
### 2.6 gmail_tokens 테이블 ### 2.6 gmail_tokens 테이블
**컬럼**: id, user_id, slack_user_id, robeing_id, access_token, refresh_token, oauth_config, scopes, expiry, is_equipped, equipped_to, created_at, updated_at **컬럼**: id, user_id, username, slack_user_id, robeing_id, token_data(JSON), access_token, refresh_token, oauth_config, scopes, expiry, is_equipped, equipped_to, created_at, updated_at
**주의**: token_data(JSON) 컬럼과 개별 토큰 컬럼(access_token, refresh_token)이 병행 사용 중
| 파일 경로 | 라인 번호 | 작업 내용 | | 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------| |-----------|-----------|-----------|
@ -206,11 +208,16 @@
1. **다중 라이브러리 사용**: SQLAlchemy, asyncpg, psycopg2를 혼용하고 있어 일관성 있는 수정 필요 1. **다중 라이브러리 사용**: SQLAlchemy, asyncpg, psycopg2를 혼용하고 있어 일관성 있는 수정 필요
2. **UUID 처리**: 일부는 문자열로, 일부는 UUID 타입으로 처리 2. **UUID 처리**: 일부는 문자열로, 일부는 UUID 타입으로 처리
3. **JSON 컬럼**: preferences, scopes, oauth_config 등 JSON 타입 컬럼 처리 주의 3. **JSON 컬럼**: preferences, scopes, oauth_config, token_data 등 JSON 타입 컬럼 처리 주의
4. **외래키 관계**: workspace_members의 workspace_id, user_id FK 관계 유지 4. **외래키 관계**: workspace_members의 workspace_id, user_id FK 관계 유지
5. **gen_random_uuid()**: PostgreSQL 함수 사용 부분 확인 필요 5. **gen_random_uuid()**: PostgreSQL 함수 사용 부분 확인 필요
6. **모델 불일치**: 같은 테이블에 대한 서로 다른 모델 정의 (users의 picture vs avatar_url, conversation_logs의 slack_user_id 유무) 6. **모델 불일치 - 심각**:
- users: picture vs avatar_url, oauth_provider/oauth_id vs provider/provider_id
- workspace_members: role이 Enum vs String(50)
- conversation_logs: slack_user_id 유무
- gmail_tokens: token_data(JSON) vs 개별 컬럼 병행
7. **마이그레이션 충돌**: slack_workspaces의 company_id → workspace_id 변경이 모델과 불일치 7. **마이그레이션 충돌**: slack_workspaces의 company_id → workspace_id 변경이 모델과 불일치
8. **복합 고유키**: slack_user_mapping의 (slack_user_id, slack_workspace_id) 조합 처리
## 5. 작업 우선순위 ## 5. 작업 우선순위