# InsuRo: MediScan DB 마이그레이션 실행 + 서버 배포

## 작업 레벨: Lv.2

## 배경
task-2167에서 InsuRo 서버에 MediScan 라우터를 추가하고, Supabase 마이그레이션 SQL을 작성했으나 미실행 상태.
서버에 mediscan_router.py가 이미 존재하고 main.py에 라우터가 마운트되어 있음.

## 미해결 항목 (task-2167에서 인계)
1. Supabase 마이그레이션 미실행 → 실행 필요
2. E2E 테스트 미수행 → 실제 API 호출 테스트 필요

## 작업 1: Supabase 마이그레이션 실행

파일: `/home/jay/projects/InsuRo/server/migrations/mediscan_jobs.sql`

### 실행 방법
```bash
# Supabase CLI로 마이그레이션 실행
cd /home/jay/projects/InsuRo
# 또는 REST API로 SQL 직접 실행
curl -X POST "https://zayhfjuwviporbzokudr.supabase.co/rest/v1/rpc/exec_sql" ...
```

### 실행 전 확인
- mediscan_jobs 테이블이 이미 존재하는지 확인
- RLS 정책 정상 적용 확인
- SQL 파일 내용 검토 후 실행

## 작업 2: 서버 재시작 + API 테스트

### 서버 재시작
```bash
cd /home/jay/projects/InsuRo/server
# 기존 서버 프로세스 확인
ps aux | grep "main.py"
# 재시작
python3 main.py &
```

### API 테스트 (인증 없이 차단 확인)
```bash
# 미인증 → 401
curl -X POST "http://localhost:8001/api/mediscan/upload" 
# → {"detail": "Missing or invalid authorization"}

# 미인증 → 401
curl "http://localhost:8001/api/mediscan/history"
# → {"detail": "Missing or invalid authorization"}

# 헬스체크
curl "http://localhost:8001/api/status"
# → 200 OK
```

### API 테스트 (Hidden 유저 JWT로 실제 동작)
```bash
# Hidden 유저 JWT 획득
# POST /api/mediscan/upload 에 PDF 업로드 → job_id 반환
# POST /api/mediscan/analyze/{job_id} → 분석 시작
# GET /api/mediscan/result/{job_id} → 결과 조회
```

## 작업 3: 환경변수 확인

InsuRo 서버에 필요한 MediScan 관련 환경변수:
- MEDISCAN_ENCRYPTION_KEY (파일 암호화용)
- MediScan 파서 모듈 경로가 Python path에 포함되어야 함

## 검증 시나리오
1. mediscan_jobs 테이블 생성 확인 (Supabase 대시보드 또는 API)
2. 서버 재시작 후 /api/mediscan/ 엔드포인트 응답
3. Hidden 유저로 PDF 업로드 → 분석 → 결과 조회 E2E
4. Free 유저로 접근 시 403 차단 확인

## 주의사항
- 프로덕션 DB에 마이그레이션 실행 → 신중하게!
- 기존 InsuRo 기능에 영향 없는지 확인 (서버 재시작 시)
- mediscan_router.py 수정 금지 (이미 task-2167에서 완성)

## 참고
- task-2167 보고서: `/home/jay/workspace/memory/reports/task-2167.md`
- 라우터: `/home/jay/projects/InsuRo/server/mediscan_router.py`
- 마이그레이션: `/home/jay/projects/InsuRo/server/migrations/mediscan_jobs.sql`
- .env: `/home/jay/projects/InsuRo/.env`