Skip to content

[FIX] 완강 해도 리뷰 작성이 차단됨 #406

Description

@GANGHYEON02

완강해도 리뷰 작성이 차단됨 (미리보기 레슨이 완강 판정 분모에 포함)

📊 버그 심각도 및 우선순위

  • P0
  • P1 : 완강 사용자의 리뷰 작성 기능 차단 + 마이페이지 완강 표시 불일치
  • P2

🐛 문제 상황 (현상)

  • 연관 이슈 번호 : # (E-1 미리보기 카운트 버그와 동일 뿌리)
  • 연관 도메인 : enrollment_management, community
  • 문제 설명 :
    본편 레슨을 전부 시청해 실제로 완강해도, 미리보기 레슨이 전체 레슨 수(total)에 포함되어 total ≠ completed가 되고, 리뷰 작성 게이트가 이를 "미완강"으로 판단해 리뷰 작성을 차단한다(NOT_ENROLLED).
    • 완강 판정 소스: MyEnrolledCourseQueryAdaptertotal = lessons.size() (미리보기 포함) vs completed = VideoProgress.completed 개수
    • 미리보기 레슨은 진도(completed) 이력이 없어 분자엔 안 잡히고 분모(total)엔 잡힘 → 완강해도 total > completed
    • 같은 소스를 리뷰 게이트(ReviewPolicyEnrollmentCompletedCheckAdapter)와 마이페이지 완강 목록이 공유 → 두 곳 모두 영향(리뷰 차단 + 마이페이지 미완강 표시)

🔄 재현 방법 (Steps to Reproduce)

  1. 미리보기 레슨(첫 섹션 첫 레슨)이 있는 강의를 수강한다.
  2. 본편 레슨을 100% 시청해 완강한다. (미리보기는 진도 이력 없음)
  3. 마이페이지 → "수강완료"로 안 뜸 (E-1)
  4. 해당 강의에 리뷰 작성 요청 → 403 NOT_ENROLLED (기대: 작성 성공)

🕵️‍♂️ 원인 분석 및 수정 내역

  • Model / Policy
  • UseCase / Command
  • Service
  • Port / Adapter : MyEnrolledCourseQueryAdapter.findLessonsByCourseId가 강의의 전체 레슨을 담아 total(lessons.size())에 미리보기 레슨이 포함됨. 첫 섹션의 첫 레슨(orderIndex 0,0 = 미리보기)을 제외하고 집계하도록 수정 → total이 본편 레슨 수로 정정됨.
  • Repository
  • Controller
  • Response / Request

수정 파일

  • enrollment_management/infrastructure/persistence/MyEnrolledCourseQueryAdapter.java (findLessonsByCourseId에 미리보기 제외 필터 추가)

참고

  • 리뷰 게이트(community/.../ReviewPolicy, EnrollmentCompletedCheckAdapter)는 별도 수정 불필요 — 동일한 MyEnrolledCourseQueryPort를 재사용하므로 위 한 곳 수정으로 리뷰 차단·마이페이지 완강 표시가 동시에 정상화됨.
  • 미리보기 판정 기준은 기존 PreviewLessonPolicy와 동일(첫 섹션 첫 레슨). 단 해당 정책은 learning_activity 도메인 엔티티 타입을 받으므로, enrollment_management 엔티티에는 동일 기준(section.orderIndex==0 && lesson.orderIndex==0)의 로컬 판정 사용.
  • 사전 확인 필요: EnrolledCourseSectionReferenceEntityorderIndex 필드 존재 여부.

🚨 검증 및 회귀 방지 (TestCode)

  • 미리보기 포함 강의에서 본편 완강 시 total == completed → 리뷰 작성 성공 테스트
  • 마이페이지 완강 목록에 정상 노출 확인
  • 미완강(본편 일부 미시청) 시 여전히 차단(NOT_ENROLLED)되는지 검증
  • 미리보기 레슨이 없는 강의는 기존과 동일 동작하는지 회귀 확인

📸 로그 및 참고 자료

  • E-1(미리보기 카운트 버그)과 동일한 데이터 소스에서 파생된 문제
  • 올바른 레퍼런스: CourseProgressQueryAdapter:48 — 이미 !PreviewLessonPolicy.isPreview(...)로 미리보기 제외 집계 중

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions