# InsuRo 소식지/보험료 삭제 시 Google Drive 파일도 함께 삭제

## 작업 레벨: Lv.1

## 프로젝트
- InsuRo: `/home/jay/projects/InsuRo`
- 서버: `/home/jay/projects/InsuRo/server`

## 문제
소식지/보험료 항목 삭제 시 DB 레코드만 삭제되고, Google Drive에 업로드된 파일은 남아있음 → Drive에 고아 파일 누적

## 수정

### 1. 서버 엔드포인트 추가 (main.py)
```python
@app.delete("/api/insuro/delete-with-drive/{table}/{record_id}")
async def delete_with_drive(table: str, record_id: str, request: Request):
    # 1. JWT 인증
    # 2. DB에서 레코드 조회 → file_url 가져오기
    # 3. file_url에서 Drive file_id 추출 (https://drive.google.com/file/d/{id}/view)
    # 4. Drive 파일 삭제 (gdrive.py의 get_drive_service() 사용)
    # 5. DB 레코드 삭제
```

### 2. gdrive.py에 삭제 함수 추가
```python
def delete_drive_file(file_id: str):
    service = get_drive_service()
    service.files().delete(fileId=file_id).execute()
```

### 3. 프론트엔드 수정
AdminNewsletters.tsx, AdminPremiumData.tsx의 handleDelete:
```tsx
// Before: supabase.from("newsletters").delete().eq("id", item.id)
// After: fetch(`${INSURO_API_BASE}/api/insuro/delete-with-drive/newsletters/${item.id}`, { method: "DELETE", ... })
```

## affected_files
- `server/main.py` (수정 — delete 엔드포인트 추가)
- `server/gdrive.py` (수정 — delete_drive_file 함수 추가)
- `src/pages/AdminNewsletters.tsx` (수정 — handleDelete)
- `src/pages/AdminPremiumData.tsx` (수정 — handleDelete)

## 검증 시나리오
1. 소식지 항목 삭제 → DB 레코드 삭제 + Google Drive 파일 삭제 확인
2. 보험료 항목 삭제 → 동일 확인
3. Drive에 파일 없는 경우 (이전 데이터) → 에러 없이 DB만 삭제
