# UUID 원칙 위반 - email_integration 및 skill-email 서비스

## 작성일: 2025-09-26
## 작성자: happybell80

---

## 문제 상황

### 핵심 문제
"모든 내부 로직은 UUID만 사용" 원칙(250924 문서)을 위반하여 Slack ID와 UUID 혼용

### 발견된 위반 사항

#### 1. rb8001/app/skills/email_integration.py
- **잘못된 테이블명**: `gmail_token` → 실제는 `gmail_token`
- **Slack ID 사용**: skill-email 호출 시 Slack ID 전달
- **미정의 변수**: `user_uuid` 변수 정의 없이 사용 (136줄)

#### 2. skill-email 서비스
- **이중 처리**: UUID와 Slack ID 모두 받아서 처리
- **DB 쿼리 분기**: UUID인지 Slack ID인지 판단 후 다른 쿼리 실행
- **oauth_id 조회**: Slack ID로 user 테이블의 oauth_id 조회

## 원칙 재확인

### UUID 중심 원칙 (250924 문서)
- 모든 내부 로직은 UUID만 사용
- Gateway가 UUID 변환 책임
- UUID 없으면 403 차단

## 수정 내역

### rb8001 수정 (완료)
```python
# 변경 전: Slack ID 직접 사용
slack_id = user_id

# 변경 후: UUID 원칙 적용
if user_id.startswith('U'):
    user_uuid = await self.get_uuid_from_slack(user_id)
else:
    user_uuid = user_id
```

### 테이블명 수정 (완료)
- `gmail_token` → `gmail_token`
- `SELECT COUNT(*) FROM gmail_token WHERE user_id = %s`

## 남은 작업

### skill-email 서비스 수정 필요
1. **(완료) main.py / routers/**: `user_id`를 UUID로 강제 (비-UUID는 4xx)
2. **(진행 필요) db_credentials_provider.py**: Slack ID 처리 제거, UUID만 받기
3. **(완료) naverworks_provider.py**: UUID만 허용 (비-UUID는 에러)

### 영향 범위
- rb8001: email_integration.py
- skill-email: 전체 provider 및 API
- DB: gmail_token, naverworks_token 테이블 쿼리

## 테이블 스키마 확인 (tables.md 기준)

### gmail_token (s 없음!)
| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| user_id | UUID | user 테이블 참조 |
| is_equipped | BOOLEAN | 장착 상태 |

### naverworks_token
| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| user_id | UUID | user 테이블 참조 |

## 교훈
1. **원칙 준수**: "내부 로직은 UUID만 사용" 원칙 철저히 준수
2. **테이블명 확인**: 문서(tables.md) 참조하여 정확한 테이블명 사용
3. **일관성**: 모든 서비스가 동일한 ID 체계 사용

---

## 2025-12-17 후속 업데이트
- **skill-email**: `/messages`, `/messages/{id}`, `/attachments`의 `user_id`를 UUID로 강제 (문자열 이메일/Slack ID 입력은 차단)
- **rb8001**: skill-email 호출부에서 `user_id(UUID)`를 전달하도록 정리 (비-UUID 입력 의존 제거)

---

**문서 끝**
