DOCS/plans/250819_gmail_item_detailed_tasks.md
happybell80 4169c8d4fd fix: Gmail 아이템 구현 태스크 진행 상황 정정
- 섹션 3,4,4-1: 실제로 아직 구현 안 됨 ([ ]로 복구)
- 섹션 5: 프론트엔드만 완료 (배포 정보 추가)
- 섹션 7,8: 통합 테스트와 문서화 아직 미완료
- 실수로 전체 체크박스를 [x]로 변경한 것 복구
2025-08-19 11:22:19 +09:00

423 lines
11 KiB
Markdown

# Gmail 아이템 구현 세부 작업 목록
## 작성일: 2025-08-19
## 작성자: Claude (with 종태)
## 상태: 세부 작업 분해
---
## 1. 데이터베이스 작업 (서버 관리자)
### 1.1 robeing_stats 테이블 생성
- [x] 테이블 생성 SQL 작성
- [x] user_id 외래키 제약 추가
- [x] robeing_id 유니크 제약 추가
- [x] 인덱스 생성 (robeing_id, user_id)
- [x] 기본 데이터 삽입 (rb8001, level=5)
- [x] 생성 확인 쿼리 실행
### 1.2 gmail_tokens 테이블 수정
- [x] is_equipped 컬럼 추가
- [x] equipped_to 컬럼 추가
- [x] 기존 데이터 is_equipped=false로 초기화
- [x] 인덱스 재구성
- [x] 수정 확인 쿼리 실행
### 1.3 gmail_audit_logs 테이블 생성
- [x] 테이블 생성 SQL 작성
- [x] created_at 인덱스 추가
- [x] user_id 인덱스 추가
- [x] action 인덱스 추가
- [x] 생성 확인 쿼리 실행
---
## 2. robeing-monitor 서비스 구축 (로컬 개발자)
### 2.1 프로젝트 초기 설정
- [x] robeing-state-service 클론
- [x] 포트 9024로 변경
- [x] requirements.txt 확인
- [x] .env 파일 생성
- [x] PostgreSQL 연결 설정 (192.168.219.45)
### 2.2 아이템 매니저 구현
- [x] app/monitor 디렉토리 생성
- [x] gmail_item_manager.py 생성
- [x] 데이터베이스 연결 클래스 작성
- [x] 아이템 조회 메서드 구현
- [x] get_all_items(user_id)
- [x] get_equipped_item(user_id)
- [x] get_available_items(user_id)
- [x] 아이템 장착 메서드 구현
- [x] check_level_requirement(robeing_id)
- [x] check_ownership(user_id, item_id)
- [x] equip_item(user_id, robeing_id, item_id)
- [x] unequip_item(user_id, item_id)
- [x] 감사 로그 메서드 구현
- [x] log_action(user_id, robeing_id, action, details)
### 2.3 API 엔드포인트 구현
- [x] app/api/item_routes.py 생성
- [x] GET /api/items/gmail 엔드포인트
- [x] 요청 파라미터 검증
- [x] 아이템 목록 조회
- [x] capabilities 계산
- [x] 응답 포맷팅
- [x] POST /api/items/gmail/:userId/equip 엔드포인트
- [x] 요청 바디 검증
- [x] 레벨 체크
- [x] 소유권 확인
- [x] 장착 처리
- [x] 감사 로그 기록
- [x] 응답 반환
- [x] POST /api/items/gmail/:userId/reauth 엔드포인트
- [x] auth-server와 통신 설정
- [x] OAuth URL 생성 요청
- [x] state 관리
- [x] 응답 반환
- [x] DELETE /api/items/gmail/:userId 엔드포인트
- [x] 철회 권한 확인
- [x] 토큰 삭제 처리
- [x] 감사 로그 기록
- [x] 응답 반환
### 2.4 서비스 배포
- [x] Dockerfile 수정
- [x] docker-compose.yml 작성
- [x] 빌드 테스트
- [x] 컨테이너 실행
- [x] 헬스체크 엔드포인트 확인
- [x] 로그 확인
---
## 3. skill-email DB 연결 (희재)
### 3.1 DB 연결 설정
- [ ] psycopg2 의존성 추가
- [ ] .env 파일 수정
- [ ] TOKEN_PROVIDER=database
- [ ] POSTGRES_CONNECTION_STRING 설정
- [ ] 데이터베이스 연결 테스트 스크립트 작성
- [ ] 연결 확인
### 3.2 DBCredentialsProvider 구현
- [ ] services/db_credentials_provider.py 생성
- [ ] __init__ 메서드 구현
- [ ] DB 연결 초기화
- [ ] 연결 풀 설정
- [ ] get_credentials 메서드 구현
- [ ] SQL 쿼리 작성
- [ ] 토큰 조회 로직
- [ ] JSON 파싱
- [ ] Credentials 객체 생성
- [ ] refresh_token 메서드 구현
- [ ] 토큰 갱신 로직
- [ ] DB 업데이트
- [ ] 에러 처리 추가
- [ ] 토큰 없음 처리
- [ ] DB 연결 실패 처리
- [ ] 파싱 에러 처리
### 3.3 기존 코드 수정
- [ ] main.py 수정
- [ ] FileCredentialsProvider import 제거
- [ ] DBCredentialsProvider import 추가
- [ ] Provider 초기화 코드 변경
- [ ] 환경변수 체크 로직 수정
- [ ] 테스트 코드 작성
- [ ] 로컬 테스트
### 3.4 배포 준비
- [ ] requirements.txt 업데이트
- [ ] Dockerfile 확인
- [ ] 빌드 테스트
- [ ] 커밋 및 푸시
---
## 4. rb8001 통합 (희재)
### 4.1 환경 설정
- [ ] .env 파일 생성/수정
- [ ] DATABASE_URL 설정
- [ ] SKILL_EMAIL_URL=http://192.168.219.52:8501
- [ ] MONITOR_SERVICE_URL=http://192.168.219.52:9024
- [ ] 환경변수 로드 확인
- [ ] 연결 테스트 스크립트 작성
### 4.2 아이템 관리 로직
- [ ] app/items 디렉토리 생성
- [ ] gmail_item_handler.py 생성
- [ ] 아이템 상태 체크 함수
- [ ] check_gmail_equipped(user_id)
- [ ] get_gmail_capabilities(user_id)
- [ ] robeing-monitor와 통신
- [ ] 아이템 조회 API 호출
- [ ] 응답 파싱
- [ ] 에러 처리
### 4.3 이메일 스킬 연동
- [ ] app/skills/email_integration.py 생성
- [ ] 이메일 요청 감지
- [ ] 메시지 파싱
- [ ] 이메일 의도 분류
- [ ] 아이템 장착 확인
- [ ] robeing-monitor API 호출
- [ ] 장착 상태 검증
- [ ] skill-email 호출
- [ ] 요청 포맷 구성
- [ ] API 호출
- [ ] 응답 처리
- [ ] 사용자 피드백
- [ ] 성공 메시지 생성
- [ ] 에러 메시지 생성
- [ ] 재인증 안내
### 4.4 router 수정
- [ ] app/router.py 수정
- [ ] 이메일 관련 라우팅 추가
- [ ] 아이템 체크 미들웨어 추가
- [ ] 에러 핸들링 추가
### 4.5 테스트 및 배포
- [ ] 단위 테스트 작성
- [ ] 통합 테스트
- [ ] Docker 빌드
- [ ] 배포
- [ ] 로그 모니터링
---
## 4-1. rb10508_micro 통합 (종태)
### 4-1.1 환경 설정
- [ ] .env 파일 수정
- [ ] MONITOR_SERVICE_URL=http://192.168.219.52:9024
- [ ] SKILL_EMAIL_URL=http://192.168.219.52:8501
- [ ] 환경변수 로드 확인
### 4-1.2 Gmail 의도 분류 추가
- [ ] app/core/intent_classifier.py 수정
- [ ] Gmail 관련 키워드 감지 ("이메일", "메일", "전송", "보내")
- [ ] Gmail 의도 분류 추가 (INTENT_GMAIL)
- [ ] 의도 분류 테스트
### 4-1.3 아이템 확인 미들웨어
- [ ] app/middleware/gmail_item_check.py 생성
- [ ] robeing-monitor API 클라이언트
- [ ] get_gmail_status(user_id) 함수
- [ ] is_gmail_equipped(user_id) 함수
- [ ] 미장착 시 응답 메시지
- [ ] "Gmail 패스포트를 먼저 장착해주세요"
- [ ] 인벤토리 링크 제공
### 4-1.4 skill-email 통합
- [ ] app/skills/email_handler.py 생성
- [ ] skill-email API 호출 함수
- [ ] send_email_request(user_id, to, subject, body)
- [ ] 응답 파싱 및 포맷팅
- [ ] 에러 처리
- [ ] 토큰 만료 → "Gmail 재인증이 필요합니다"
- [ ] 네트워크 에러 → 재시도 로직
### 4-1.5 메시지 라우터 수정
- [ ] app/core/handlers/message_handler.py 수정
- [ ] Gmail 의도 감지 시 분기
- [ ] 아이템 장착 확인
- [ ] skill-email 호출
- [ ] 응답 반환
### 4-1.6 테스트 시나리오
- [ ] "종태님한테 회의 일정 메일 보내줘"
- [ ] Gmail 미장착 → 장착 안내
- [ ] Gmail 장착 → 이메일 발송 성공
- [ ] "프로젝트 진행 상황 이메일 작성해줘"
- [ ] 이메일 내용 생성
- [ ] 발송 확인 요청
- [ ] 토큰 만료 시나리오
- [ ] 재인증 안내 메시지
### 4-1.7 배포
- [ ] 코드 커밋 및 푸시
- [ ] Gitea Actions 배포 확인
- [ ] 로그 모니터링
- [ ] 실제 테스트
---
## 5. 프론트엔드 구현 (종태) ✅ 완료
### 5.1 API 클라이언트 확장
- [x] src/api/robeing-api.ts 수정
- [x] 타입 정의
- [x] GmailCredentialItem 인터페이스
- [x] GmailItemsResponse 인터페이스
- [x] EquipResponse 인터페이스
- [x] ReauthResponse 인터페이스
- [x] API 함수 구현
- [x] getGmailItems()
- [x] 헤더 설정 (JWT 토큰)
- [x] 에러 처리
- [x] 응답 타입 변환
- [x] equipGmailItem()
- [x] 요청 바디 구성
- [x] 에러 처리
- [x] 성공 콜백
- [x] startGmailReauth()
- [x] OAuth 리다이렉트 처리
- [x] state 저장
- [x] revokeGmailItem()
- [x] 확인 다이얼로그
- [x] 삭제 요청
- [x] 상태 업데이트
### 5.2 Context 상태 관리
- [x] src/contexts/ItemContext.tsx 생성
- [x] State 인터페이스 정의
- [x] equippedItem: GmailCredentialItem | null
- [x] availableItems: GmailCredentialItem[]
- [x] loading: boolean
- [x] error: string | null
- [x] Actions 정의
- [x] FETCH_ITEMS_START
- [x] FETCH_ITEMS_SUCCESS
- [x] FETCH_ITEMS_ERROR
- [x] EQUIP_ITEM_SUCCESS
- [x] UNEQUIP_ITEM_SUCCESS
- [x] Reducer 구현
- [x] Context Provider 구현
- [x] Custom hooks
- [x] useGmailItems()
- [x] useEquipItem()
### 5.3 인벤토리 UI 컴포넌트
- [x] src/components/Inventory 디렉토리 생성
- [x] GmailPassportCard.tsx
- [x] 카드 레이아웃
- [x] Gmail 로고 아이콘
- [x] 이메일 주소 표시
- [x] 권한 뱃지 (send/read/modify)
- [x] 장착 상태 표시
- [x] 장착/해제 버튼
- [x] 재인증 버튼 (필요시)
- [x] InventoryGrid.tsx
- [x] 카드 그리드 레이아웃
- [x] 장착된 아이템 섹션
- [x] 사용 가능 아이템 섹션
- [x] 빈 상태 메시지
- [x] EquipModal.tsx
- [x] 장착 확인 다이얼로그
- [x] 레벨 요구사항 표시
- [x] 애니메이션 효과
- [x] LevelRequirement.tsx
- [x] 레벨 부족 시 표시
- [x] "레벨 5가 되면 사용 가능해요!" 메시지
- [x] 현재 레벨 표시
### 5.4 스타일링
- [x] src/styles/inventory.css 생성
- [x] 카드 스타일
- [x] 호버 효과
- [x] 장착 상태 하이라이트
- [x] 비활성 상태 (레벨 부족)
- [x] 버튼 스타일
- [x] 장착 버튼 (Primary)
- [x] 해제 버튼 (Secondary)
- [x] 재인증 버튼 (Warning)
- [x] 애니메이션
- [x] 페이드인/아웃
- [x] 장착 시 반짝임
- [x] 로딩 스피너
### 5.5 통합 및 테스트
- [x] App.tsx에 라우트 추가
- [x] 네비게이션 메뉴 추가
- [x] Context Provider 연결
- [x] 개발 서버 테스트
- [x] 에러 케이스 테스트
- [x] 네트워크 에러
- [x] 인증 만료
- [x] 레벨 부족
- [x] 서버 에러
### 5.6 배포 (2025-08-19 11:10 완료)
- [x] Git 커밋 (Hash: 09b1001)
- [x] Gitea Actions 빌드
- [x] dist 디렉토리 생성
- [x] Nginx 배포
- [x] https://ro-being.com/inventory 접속 확인
---
## 6. Gateway 설정 (서버 관리자)
### 6.1 라우팅 규칙 추가
- [x] nginx 설정 수정 (또는 Gateway 코드)
- [x] /api/items/* → robeing-monitor:9024 프록시
- [x] 헤더 전달 설정
- [x] CORS 설정
### 6.2 인증 미들웨어
- [x] JWT 검증 로직 확인
- [x] 사용자 정보 전달
- [x] 에러 응답 표준화
---
## 7. 통합 테스트
### 7.1 E2E 시나리오
- [x] 로그인 → 인벤토리 조회 (Gateway 통해 테스트 완료)
- [ ] Gmail 아이템 장착 (실제 Gmail 토큰 필요)
- [ ] 이메일 발송 요청
- [ ] 토큰 만료 → 재인증
- [ ] 아이템 철회
### 7.2 부하 테스트
- [ ] 동시 사용자 테스트
- [ ] API 응답 시간 측정
- [ ] 에러율 확인
### 7.3 보안 테스트
- [ ] 토큰 노출 확인
- [ ] SQL 인젝션 테스트
- [ ] 권한 우회 시도
---
## 8. 문서화
### 8.1 API 문서
- [ ] Swagger/OpenAPI 스펙 작성
- [ ] 요청/응답 예시 추가
- [ ] 에러 코드 정리
### 8.2 운영 가이드
- [ ] 배포 절차
- [ ] 모니터링 방법
- [ ] 트러블슈팅 가이드
### 8.3 사용자 가이드
- [ ] Gmail 아이템 사용법
- [ ] 재인증 방법
- [ ] FAQ
---
## 완료 기준
- [ ] 모든 테스트 통과
- [ ] 프로덕션 배포 완료
- [ ] 문서 작성 완료
- [ ] 사용자 피드백 수집
---
**총 작업 항목: 약 150개**
**예상 소요 시간: 각 항목 평균 30분 = 약 75시간**
---
**문서 끝**