# 작업 보고서: task-125.1 InsuWiki 어드민 약관 업로드→인덱싱 파이프라인 연결 + 버그수정

## 작업 내용
어드민 PDF 약관 업로드 API(`drive-upload/route.ts`)에서 Google Drive 업로드 및 `insurance_metadata` upsert 후, Firestore `jobs` 컬렉션에 `type: 'index_pdf'` 문서를 자동 생성하여 `onPdfIndexingJob` Cloud Function이 트리거되도록 파이프라인을 연결했습니다. 동시에 관련 타입 버그를 수정했습니다.

## 생성/수정 파일 목록

### 수정된 파일
1. **`/home/jay/projects/insuwiki/nextapp/src/app/api/admin/drive-upload/route.ts`**
   - `FieldValue`, `Timestamp` import 추가 (line 4)
   - `results` 타입에 `jobId?: string` 추가 (line 83)
   - `insurance_metadata` upsert 후 `jobs` 컬렉션에 `index_pdf` job 문서 생성 로직 추가 (lines 140-155)
   - job 필드: `type`, `status`, `driveFileId`, `companyId`, `companyName`, `productId`, `productName`, `category`, `effectiveDate`, `createdAt` (serverTimestamp), `updatedAt` (serverTimestamp), `expireAt` (20분 TTL)
   - 변경 사유: 업로드→인덱싱 파이프라인 자동 연결

2. **`/home/jay/projects/insuwiki/nextapp/src/types/firestore.ts`**
   - `JobStatus` 타입에 `'indexing'` 추가 (line 188) — Cloud Function이 이미 사용 중이었으나 타입 선언에 누락되어 있던 버그 수정
   - `Job.type`에 `'index_pdf'` 유니온 추가 (line 195) — 타입 버그 수정
   - `Job.userId` optional 변경 (line 193) — `index_pdf` job은 시스템 생성이므로 userId 불필요
   - `Job.question` optional 변경 (line 197) — `index_pdf` job에 question 없음
   - `index_pdf` job용 필드 추가: `driveFileId`, `companyName`, `productName`, `category`, `effectiveDate`, `chunksCount` (lines 205-211)
   - 변경 사유: Cloud Function 실제 사용 패턴과 타입 선언 불일치 수정

### 생성된 파일
- `/home/jay/workspace/teams/dev1/plan-task-125.1.md` — 실행 계획서

## 테스트 결과
Firebase/Google Drive 연동이 필요한 실서버 코드이므로 단위 테스트 실행 불가. 아르고스(테스터) 서브에이전트가 코드 리뷰 기반으로 다음 항목을 전수 검증:
- Cloud Function 트리거 조건 매칭 (`type`, `status`, 7개 필드) → **PASS**
- 엣지 케이스 3건 (파일명 오류, Drive 실패, job 실패) → 모두 **PASS**
- 기존 코드 영향도 3건 (`query/route.ts`, `status/route.ts`, `useAIPolling.ts`) → 모두 **영향 없음**
- 타입 일관성 → **PASS** (초기 WARN 2건은 수정 완료: `createdAt`/`updatedAt`를 `FieldValue.serverTimestamp()` 사용, `expireAt` 20분 TTL 추가)

## 버그 유무
- 신규 버그: 없음
- 수정된 기존 버그:
  1. `Job.type`에 `'index_pdf'` 누락 → 수정
  2. `JobStatus`에 `'indexing'` 누락 → 수정
  3. 업로드 후 인덱싱 파이프라인 미연결 → 수정

## 검토한 대안과 기각 사유
- Cloud Storage 트리거 사용 → 기각. 프로젝트가 Firestore 기반 job 큐로 통일된 아키텍처.
- 별도 admin API로 수동 인덱싱 트리거 → 기각. 자동 연결이 UX 우월.
- `new Date().toISOString()` 사용 → 기각. `FieldValue.serverTimestamp()`가 기존 `pdf_query` job과 일관적이고 Firestore 네이티브.

## 팀장 검토 결과
- **불칸 (백엔드)**: ST-1(route 수정) 1차 검토 통과 후 아르고스 WARN 2건 반영하여 수정. 최종 통과.
- **불칸 (백엔드)**: ST-2(타입 수정) 1차 검토 통과, 추가로 `JobStatus`에 `'indexing'` 추가 및 `userId` optional 변경 반영. 최종 통과.
- **아르고스 (테스터)**: 코드 리뷰 11개 항목 전수 검증, WARN 2건 식별하여 수정 반영됨. 최종 통과.

## 셀프 QC
1. **이 변경이 다른 파일에 영향을 미치는가?** → 타입 확장(유니온 추가, optional 변경)은 하위 호환. 기존 `pdf_query` job 생성/소비 코드에 영향 없음.
2. **이 로직의 엣지 케이스는?** → 파일명 오류→skip, Drive 실패→catch, 동시 업로드→각각 독립 job. 모두 코드 리뷰로 확인됨.
3. **이 구현이 작업 지시와 정확히 일치하는가?** → "업로드 후 jobs에 index_pdf 문서 생성하여 pdfIndexing Cloud Function 트리거" — 정확히 구현됨.
4. **에러 처리와 보안은 확인했는가?** → Admin 인증 기존 로직 유지. job 생성 실패 시 개별 에러 처리. 새로운 보안 표면 없음.
5. **테스트가 모든 경로를 커버하는가?** → 실서버 환경 의존 코드. 아르고스 코드 리뷰로 정상/에러/엣지 전 경로 검증 완료.

## 비고
- 기존 `drive-upload/route.ts`의 Drive API 쿼리(`q` 파라미터)에 파일명 직접 삽입 이슈(잠재적 injection)가 있으나, 이는 기존 코드 문제로 현재 태스크 스코프 외.
- `insurance_metadata`의 `docId` = `${companyId}_${productId}` 패턴에서 `productId`가 이미 `companyId` prefix를 포함하여 중복이 발생하나, 기존 설계이므로 현재 태스크에서 변경하지 않음.
