백로그
0할 일
0진행 중
0리뷰
0완료 (30일)
1유료 콘텐츠 PDF 파트셜 + 오케스트레이터 연동
## 목표 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에 포함되지 않음