콘텐츠로 이동

StudyRoom

1. 한 줄 정의

선생님이 개설·운영하는 학습 공간 단위. 학생을 초대해 수업노트·과제·QnA를 한 곳에 모은다. 선생님에겐 자기표현·포트폴리오 공간, 학생에겐 소통·질문 동기부여 공간.

2. 핵심 개념

  • StudyRoom — 본체(선생님 소유). name(30자), description(90자), visibility(PRIVATE/PUBLIC), modality/class_form/subject_type/school_level/grade, capacity, teacher_id FK
  • StudyRoomStudent — 학생 가입·승인 매핑. state enum: PENDING / APPROVED / REJECTED / TERMINATED
  • 초대(Invitation) — Owner(생성 선생님)만 가능. 이메일 입력 or 초대 링크(token, MVP-C). 학생만 초대(보호자는 학생에 귀속)
  • 프리뷰 — PUBLIC 스터디룸은 비회원도 미리보기(이름/설명/문의) 조회 가능 (MVP-C)

3. 관련 코드

  • [mvp-back:domain/studyroom](studyroom.md), mvp-back:domain/studyroomstudent
  • [mvp-back:application/service/studyroom](studyroom.md)
  • DDL: study_room, study_room_student 테이블 (teams/engineering/infra/db-ddl)
  • [mvp-front:src/app/(private)/studyroom](studyroom.md), (public)/studyrooms(프리뷰)
  • 엔티티 영속화 패턴은 teams/engineering/guides/jpa-query·어댑터 패턴 참조 (StudyRoomEntity는 영속 TeacherEntity를 findById로 조회 후 조립)

4. 상태/생명주기

StudyRoom: 생성 → 모집 → 활성 → soft delete (deleted_at)
StudyRoomStudent.state: PENDING → APPROVED → TERMINATED
                                → REJECTED

삭제 시 소속 수업노트·과제 등도 함께 소프트 딜리트 (teams/engineering/guides/soft-delete Cascade 루트가 StudyRoom).

5. 외부 의존

6. UI 노출

  • 스터디룸 리스트: (home)/studyrooms (정렬: 생성순 default / 가나다순)
  • 생성/관리/대시보드: (private)/studyroom
  • 공개 프리뷰(비회원): (public)/studyrooms

7. 결정 이력

8. 권한 / 정책 요약

역할 권한
비회원 PUBLIC 목록·프리뷰·초대 링크(token) 조회만
선생님 자신이 생성한 룸 CRUD, 학생 초대(최대 100명)·퇴장·재수강
학생 직접 생성·가입요청 불가. 초대(이메일/링크)로만 입장. APPROVED 룸 조회
보호자 전용 API 없음. 연결된 자녀 활동을 통해 간접 조회
  • 사용자당 스터디룸 생성 제한 5개, 룸당 로그 최대 1,000개
  • 학생↔보호자 연결 각 4명

9. 열린 질문 / TODO

  • 활성화/비활성화 토글 (TBD)
  • 챌린지 기능이 StudyRoom 컨텍스트 안인지 글로벌인지 → teams/engineering/domains/challengevisibility 컬럼으로 양립
  • 스터디룸 육성/프리미엄 기능 (성진 제안, 추후 BM)