fix: 무료수강 CTA 계약 정렬#684
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
Your plan currently allows 1 review/hour. Refill in 13 minutes and 34 seconds. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more review capacity refills, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
📝 Walkthrough개요코스 뷰어 상태 판단 로직을 viewerStatus 열거형에서 course 객체의 부울 필드(isFreeEnrolled, isPaidEnrolled, hasFullAccess, canFreeEnroll)로 전환하여 단순화하고, 페이지의 CTA 라벨 계산, 사이드바 렌더링, 무료 코스 등록 흐름, 테스트, E2E 모킹을 일관되게 조정합니다. 변경사항수강 CTA 로직 단순화
시퀀스 다이어그램sequenceDiagram
participant Page as 페이지 ([slug]/page.tsx)
participant StatusHelper as 상태 헬퍼<br/>(course-viewer-status.ts)
participant Sidebar as 사이드바<br/>(class-detail-sidebar.tsx)
participant User as 사용자
Page->>StatusHelper: canShowCourseFreeEnrollCta(course)
StatusHelper-->>Page: course.canFreeEnroll만 확인
Page->>Page: ctaLabel 계산<br/>(canFreeEnroll 우선)
Page->>Sidebar: ctaLabel, courseDetail 전달
Sidebar->>Sidebar: ctaLabel 존재?
alt ctaLabel 있음 (인증)
Sidebar->>User: "수강 시작" 버튼 표시
else ctaLabel 없음 & canFreeEnroll (미인증)
Sidebar->>User: "무료 코스 시작" 모달 제공
else 둘 다 없음
Sidebar->>User: 버튼 미표시
end
추정 검토 난이도🎯 3 (중간) | ⏱️ ~20분 관련 PR
추천 라벨
시
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
2a26455 to
eb83872
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/components/pages/class/class-detail-sidebar.tsx (1)
138-160: 💤 Low value미인증 사용자의 CTA 텍스트 일관성을 확인하세요.
미인증 상태에서 표시되는 버튼 텍스트 "무료 코스 시작하기"(156번 줄)가
page.tsx의ctaLabel계산 로직(72번 줄)과 일치합니다. 다만 이 문자열이 두 곳에 하드코딩되어 있어, 향후 문구 변경 시 불일치가 발생할 수 있습니다.♻️ 제안: 상수로 추출하여 일관성 보장
공통 상수 파일에 CTA 레이블을 정의하고 양쪽에서 참조하도록 리팩터링할 수 있습니다:
// src/components/pages/class/class-detail-constants.ts 또는 별도 파일 export const CTA_LABELS = { FREE_COURSE_START: '무료 코스 시작하기', // ... 다른 레이블들 } as const;그런 다음
page.tsx와class-detail-sidebar.tsx양쪽에서 이 상수를 import하여 사용할 수 있습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/pages/class/class-detail-sidebar.tsx` around lines 138 - 160, 양쪽에 하드코딩된 "무료 코스 시작하기" 텍스트 때문에 ctaLabel 계산과 사이드바 버튼 텍스트가 불일치할 수 있으니, 공통 상수(예: CTA_LABELS.FREE_COURSE_START)를 새로 추출해서 page.tsx와 class-detail-sidebar.tsx에서 import하여 사용하도록 교체하세요; 구체적으로는 현재 사용중인 ctaLabel 계산 로직과 LoginModal의 openTrigger 버튼 안의 문자열을 해당 상수로 대체하고, 상수를 export하는 모듈을 만들어 CTA_LABELS.FREE_COURSE_START를 참조하도록 수정하면 됩니다.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/components/pages/class/class-detail-sidebar.tsx`:
- Around line 138-160: 양쪽에 하드코딩된 "무료 코스 시작하기" 텍스트 때문에 ctaLabel 계산과 사이드바 버튼 텍스트가
불일치할 수 있으니, 공통 상수(예: CTA_LABELS.FREE_COURSE_START)를 새로 추출해서 page.tsx와
class-detail-sidebar.tsx에서 import하여 사용하도록 교체하세요; 구체적으로는 현재 사용중인 ctaLabel 계산 로직과
LoginModal의 openTrigger 버튼 안의 문자열을 해당 상수로 대체하고, 상수를 export하는 모듈을 만들어
CTA_LABELS.FREE_COURSE_START를 참조하도록 수정하면 됩니다.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1734bafa-53c2-41dc-b784-b427d71b4780
📒 Files selected for processing (5)
e2e/class/journey-map.spec.tssrc/app/(landing)/class/[slug]/page.tsxsrc/components/pages/class/class-detail-sidebar.tsxsrc/components/pages/class/course-viewer-status.test.tssrc/components/pages/class/course-viewer-status.ts
eb83872 to
290f37d
Compare
290f37d to
f6c64d0
Compare
요약
canFreeEnroll === true만 무료수강 CTA 노출 기준으로 사용합니다. (ADMIN != PAID)isFreeEnrolled/isPaidEnrolled, 전체 접근은hasFullAccess만 기준으로 사용합니다.백엔드 계약 확인
/tmp/spmvp-chapter-open-fix/src/main/java/com/codezerotoone/mvp/domain/course/dto/response/CourseDetailResponse.java/tmp/spmvp-chapter-open-fix/src/main/java/com/codezerotoone/mvp/domain/course/controller/CourseFreeEnrollmentController.java/tmp/spmvp-chapter-open-fix/src/main/java/com/codezerotoone/mvp/domain/course/controller/apidocs/GetCourseDetailApiDocs.java/tmp/spmvp-chapter-open-fix/src/main/java/com/codezerotoone/mvp/domain/course/controller/apidocs/PostCourseFreeEnrollmentApiDocs.java검증
yarn prettier:fixyarn typecheck./node_modules/.bin/vitest run --project unit src/components/pages/class/course-viewer-status.test.tsyarn lint:fix(0 errors, existing warnings only)Summary by CodeRabbit
릴리스 노트