5. Records — SessionRecord·Rating

세션 기록 + 회원 평가. 4C AI 역할, 3H 품질 정책 반영.

SessionRecord

Purpose: 멘토가 입력하는 세션 기록 (5분 내 SLA). AI 학습 + 다음 추천의 핵심 입력. Related PRDs: 💪 세션 진행 · 🏢 AI 엔진 Lifecycle: 멘토 입력 → 저장 → AI 학습 → 회원 노출

Fields

Field Type Required Default Description
id String cuid() PK
sessionId String - FK → Session (1:1)
mentorId String - FK
performedAt DateTime - 세션 실제 진행 시각
exercises Json - ExercisePerformed[] 구조화
formNotes Text - ”” 1-2줄 폼 이슈
handoverNotes Text - 3-5줄 다음 인계 (AI 학습용)
memberCondition Text? - null 회원 컨디션 메모
totalVolumeKg Decimal(7,2)? - null 자동 계산 (kg × reps 총합)
enteredAt DateTime now() 입력 시각 (5분 SLA 측정)
modifiedAt DateTime? - null 수정 시

exercises Json 스키마

[
  {
    "name": "데드리프트",
    "category": "lower",
    "sets": [
      { "weight": 60, "reps": 5, "completed": true, "modifiedBy": "ai" },
      { "weight": 65, "reps": 5, "completed": true, "modifiedBy": "mentor" }
    ],
    "note": "5세트째 폼 흔들림"
  }
]

Validation

  • sessionId unique (1:1)
  • handoverNotes ≥ 1자 (AI 학습용 필수)
  • enteredAt - session.completedAt ≤ 24h (정책 위반 시 알림)

Indexes

  • sessionId (unique)
  • [mentorId, performedAt] — 멘토 이력
  • [performedAt] — 시간 범위 분석

Common Queries

  • 회원 최근 N세션: JOIN Session WHERE memberId=? ORDER BY performedAt DESC LIMIT N
  • 멘토 기록 품질 (평균 길이·완성도): AVG(LENGTH(handoverNotes)), AVG(LENGTH(formNotes))
  • AI 학습 입력: SELECT exercises, handoverNotes WHERE session.memberId=? ORDER BY performedAt DESC LIMIT 10

Edge Cases

  • 입력 24h 누락 → cron 알림 → 48h 누락 시 default 기록 자동 생성
  • 멘토 수정 (modifiedAt 기록) — AI 학습 시 가중치 ↓
  • 회원이 운동 시퀀스 못 따라간 경우 → sets.completed=false 표시

Rating

Purpose: 회원이 세션 후 멘토에게 주는 평가 (5점 + 코멘트). Related PRDs: 👤 세션 진행 · 🏢 멘토 등급 Lifecycle: 회원 입력 → 저장 → 멘토 averageRating 갱신

Fields

Field Type Required Default Description
id String cuid() PK
sessionId String - FK → Session (1:1)
memberId String - denorm
mentorId String - denorm
score Int - 1-5
comment Text? - null 자유 텍스트
createdAt DateTime now()  
publicOnProfile Boolean true 멘토 프로필 노출 여부

Validation

  • sessionId unique (1:1, 1세션 = 1 평가)
  • score ∈ {1, 2, 3, 4, 5}
  • session.status = ‘completed’ 만 평가 가능
  • 평가 가능 기간: session.completedAt + 7일 이내

Indexes

  • sessionId (unique)
  • [mentorId] — 멘토 평점 집계
  • [memberId, createdAt] — 회원 평가 이력

Common Queries

  • 멘토 평균 평점: AVG(score) WHERE mentorId=?
  • 멘토 평점 분포: GROUP BY score WHERE mentorId=?
  • 회원 평가 누락: Session WHERE status='completed' AND id NOT IN (SELECT sessionId FROM Rating)

Edge Cases

  • 평가 시점 24h 미응답 → 푸시 알림 (1회)
  • 평가 시점 7일 미응답 → 자동 default 5점 (영향 ↓)
  • 평가 후 7일 이내 수정 가능 (이후 lock)
  • 부적절한 코멘트 신고 → 운영자 검토 → publicOnProfile=false

📘 사용 PRD

👤 AI 가이드 · 💪 세션 진행 · 🏢 AI 엔진


2026-05-13 초안 — SessionRecord·Rating 상세 명세