같은 멘토 동시 1 active application (status NOT IN (‘approved’, ‘rejected’))
통과 조건 (Phase 1 가설): sessionCount ≥ 100 AND averageRating ≥ 4.3 AND rebookRate ≥ 0.6 AND licenseVerified=true
State Transitions
stateDiagram-v2
[*] --> pending: 신청
pending --> video_review: 영상 업로드
video_review --> interview: 영상 통과
video_review --> rejected: 영상 부적합
interview --> written: 면담 통과
written --> approved: 필기 통과
written --> rejected: 필기 미달
Indexes
[mentorId, status] — 1 active 신청 enforce
[status, appliedAt] — admin 큐
Common Queries
심사 대기열: WHERE status IN ('video_review', 'interview', 'written') ORDER BY appliedAt
멘토 진행 상황: WHERE mentorId=?
MentorRateChange
Purpose: Pro 인증 멘토의 단가 변경 이력 (감사·정산 lookup).
Related PRDs: 💪 등급 · 💪 정산Lifecycle: 멘토 변경 → 기록 → 다음 결제부터 적용
Fields
Field
Type
Required
Default
Description
id
String
✓
cuid()
PK
mentorId
String
✓
-
FK
oldRate
Int
✓
-
변경 전 단가
newRate
Int
✓
-
변경 후
changedAt
DateTime
✓
now()
신청 시각
appliedFromDate
DateTime
✓
-
적용 시작일 (보통 changedAt + N시간)
Validation
newRate ∈ [mentor.proMinRate, mentor.proMaxRate]
mentor.tier=’pro_certified’ 필수
Indexes
[mentorId, appliedFromDate] — 정산 시 진행 당시 단가 lookup
Common Queries
진행 당시 단가: SELECT newRate WHERE mentorId=? AND appliedFromDate ≤ sessionDate ORDER BY appliedFromDate DESC LIMIT 1
Edge Cases
변경 후 매칭된 예약 = 기존 단가 유지 (사전 매칭 시점 단가 lookup)
빈번한 변경 (월 5+회) → 운영 알림
MentorComplaint
Purpose: 회원 → 멘토 컴플레인. 3단계 처리.
Related PRDs: 💪 등급 · 🏢 멘토 등급 시스템Lifecycle: 회원 신고 → admin 검토 → 처리 (피드백·등급 변경·자격 정지)
Fields
Field
Type
Required
Default
Description
id
String
✓
cuid()
PK
memberId
String
✓
-
신고자
mentorId
String
✓
-
대상 멘토
sessionId
String?
-
null
관련 세션
severity
String
✓
low
low/medium/high
text
Text
✓
-
회원 신고 내용
status
String
✓
pending
pending/in_review/resolved/escalated
resolution
String?
-
null
feedback/tier_hold/tier_down/suspension
adminNotes
Text?
-
null
resolvedAt
DateTime?
-
null
resolvedBy
String?
-
null
admin id
tierImpact
Boolean
✓
false
등급에 영향 줬는지
memberCompensation
Int?
-
null
회원 보상 회차 (있을 시)
createdAt
DateTime
✓
now()
Validation
severity enum
resolution enum (정의된 4종)
3차 컴플레인 (mentorId당) → severity 자동 high
Indexes
[mentorId, status] — 멘토별 미해결 컴플레인
[status, severity, createdAt] — admin 우선순위 큐
Common Queries
멘토 누적 컴플레인: COUNT WHERE mentorId=? AND tierImpact=true
admin 처리 대기: WHERE status='pending' ORDER BY severity DESC, createdAt
Edge Cases
회원이 보복성 신고 → admin 검토 후 dismissed
멘토 3차 컴플레인 → 자동 suspension 트리거 (admin 최종 결정)
컴플레인 해결 후 회원 보상 발급 (BonusCredit)
TierChange
Purpose: 멘토 등급 변경 감사 로그.
Related PRDs: 🏢 멘토 등급 시스템Lifecycle: 자동 또는 admin 수동 변경 → 기록
Fields
Field
Type
Required
Default
Description
id
String
✓
cuid()
PK
mentorId
String
✓
-
FK
fromTier
MentorTier
✓
-
verified / pro_certified
toTier
MentorTier
✓
-
reason
String
✓
-
“Pro 인증 통과” / “3차 컴플레인” / “자격증 만료”
changedAt
DateTime
✓
now()
changedBy
String
✓
-
admin id 또는 ‘system’
relatedApplicationId
String?
-
null
Pro 신청 통과 시
relatedComplaintId
String?
-
null
컴플레인 인한 강등 시
Validation
fromTier ≠ toTier
reason 필수
Indexes
[mentorId, changedAt] — 멘토 등급 이력
[changedAt] — 일별 변경
Common Queries
멘토 등급 변경 이력: WHERE mentorId=? ORDER BY changedAt DESC
이번 달 강등: WHERE toTier='verified' AND fromTier='pro_certified' AND changedAt > MONTH_START
Edge Cases
동시 여러 reason (예: Pro 인증 통과 + 즉시 컴플레인) → 별개 TierChange 기록