[일괄다운로드 PR2] BulkReportGenerateJob + CleanupJob
ID: e811392f-15a5-42fb-91cb-420d91cc32e1
## 설명
백그라운드 PDF→ZIP 생성 Job + 7일 만료 삭제 Job.
### BulkReportGenerateJob
- BulkReportDownload를 find → status "processing"
- member_ids로 멤버 + completed/purchased 세션 조회
- 멤버별 순차 PDF 생성 (Diagnosis::PdfGenerator 재사용)
- Tempfile ZIP → Active Storage attach
- processed_count 갱신 (진행률 추적)
- 완료 시 status "completed" + BulkReportMailer 발송
- 실패 시 개별 skip, 전부 실패면 status "failed"
- 메모리 관리: 10건마다 GC.start
### BulkReportCleanupJob
- 7일 경과 BulkReportDownload 레코드 + 첨부파일 삭제
- config/recurring.yml에 매일 2am 등록
### TDD
- Generate: 정상(completed), 부분실패(skip), 전체실패(failed), processed_count
- Cleanup: 7일 경과 삭제, 7일 이내 유지
### 참고 패턴
- `AiInsightGenerateJob`: status 추적 패턴
- `CleanupPageViewsJob`: recurring 패턴
## 의존성
PR1 완료 후
## 완료 기준
- [ ] Generate job: PDF→ZIP→attach 플로우 테스트 통과
- [ ] Cleanup job: 만료 레코드 삭제 테스트 통과
- [ ] recurring.yml에 cleanup 등록
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 진행 중 → 리뷰
2026년 03월 30일 01:34:44
-
팀팀리드 티켓 클레임 완료
2026년 03월 30일 01:30:07
-
팀팀리드 상태 변경: 할 일 → 백로그
2026년 03월 30일 00:48:05