유료 콘텐츠 PDF 파트셜 + 오케스트레이터 연동
ID: 01d54004-ec64-4960-b4f5-9a3db41308be
## 목표
PDF에 유료 콘텐츠 페이지 추가 (report_purchased? 조건부 렌더링)
## 상세 작업
### A. ResultFormatter 확인 및 데이터 매핑
- `app/services/diagnosis/result_formatter.rb` 확인
- `result[:summary_contents]`에 이미 field_type별 데이터가 있음:
- student: job, course, study
- college: job, resume, grade
- adult: job, work, competency, team
- leader: job, leadership, management, decision
- StrengthDescription에서 field_type별 content 조회됨 (dna_key 기준)
- 필요시 ResultFormatter에 premium_sections 메서드 추가
### B. PDF 파트셜 생성: `app/views/diagnoses/pdf/_premium_content.html.erb`
- `result[:summary_contents]`를 섹션별로 그룹핑하여 렌더링
- 각 field_type별 페이지:
1. **job 섹션**: 추천 직무 목록 + 각 직무별 상세 (별도 페이지)
- 직무 상세 필드: 하는 일, 주요 과업, 직업 트렌드, 필요 지식, 필요 스킬, 필요 경험, 준비할 것
- content에서 `\n\n`으로 분리, 각 문단의 첫 줄이 필드 제목 패턴인지 판별
2. **기타 섹션** (course/study/resume/work 등): bullet 리스트로 표시
- 섹션 제목 + DNA명 + 콘텐츠 리스트
- 기존 PDF 스타일 클래스 사용 (page, section-header, card, text-* 등)
### C. 오케스트레이터 연동: `app/views/diagnoses/pdf.html.erb`
- DNA detail 루프 뒤에 premium content 추가
- 조건: `<% if session.report_purchased? %>`
- `<%= render "diagnoses/pdf/premium_content", session: session, result: result, page_num: (다음 페이지 번호) %>`
## 사용 가능한 데이터
- `result[:summary_contents]` → [{field_type: "job", content: "..."}, ...]
- `result[:top_dna]` → 상위 5개 DNA 정보
- `session.report_purchased?` → payment_id.present? && payment.completed?
- StrengthDescription.content_for(dna_key:, field_type:, locale:, target_slug:)
## 주의사항
- **수정 파일**: `_premium_content.html.erb`(신규), `pdf.html.erb`(추가만)
- `_domain_detail.html.erb`는 건드리지 마세요 (다른 팀원 담당)
- `result_formatter.rb`는 읽기만, 수정이 필요하면 최소한으로
- PDF CSS는 `app/views/layouts/pdf.html.erb`에 정의됨 - 읽어서 기존 클래스 활용
## 완료 기준
- report_purchased?인 경우에만 유료 페이지가 PDF에 포함됨
- 직무별 상세가 개별 페이지로 렌더링됨
- 기타 섹션이 bullet 리스트로 정상 표시됨
- 미결제 시 유료 페이지가 PDF에 포함되지 않음
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
Ppremium-dev 상태 변경: 진행 중 → 완료
2026년 02월 27일 07:02:33
-
Ppremium-dev 상태 변경: 할 일 → 진행 중
2026년 02월 27일 06:43:26