StudyRoom¶
1. 한 줄 정의¶
선생님이 개설·운영하는 학습 공간 단위. 학생을 초대해 수업노트·과제·QnA를 한 곳에 모은다. 선생님에겐 자기표현·포트폴리오 공간, 학생에겐 소통·질문 동기부여 공간.
2. 핵심 개념¶
- StudyRoom — 본체(선생님 소유).
name(30자),description(90자),visibility(PRIVATE/PUBLIC),modality/class_form/subject_type/school_level/grade,capacity,teacher_idFK - StudyRoomStudent — 학생 가입·승인 매핑.
stateenum: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. 외부 의존¶
- S3 (썸네일/첨부 — teams/engineering/guides/image-media-api)
- 초대 발송 시 알림 생성(LNB 빨간점/GNB) — Notification 도메인 연동
6. UI 노출¶
- 스터디룸 리스트:
(home)/studyrooms(정렬: 생성순 default / 가나다순) - 생성/관리/대시보드:
(private)/studyroom - 공개 프리뷰(비회원):
(public)/studyrooms
7. 결정 이력¶
- 스터디룸 (+학생초대) FRD — 2차 스프린트 DONE
- 헥사고날 — StudyRoom save 어댑터 패턴 (영속 엔티티 안전 조립, teams/engineering/guides/backend-architecture §3)
8. 권한 / 정책 요약¶
| 역할 | 권한 |
|---|---|
| 비회원 | PUBLIC 목록·프리뷰·초대 링크(token) 조회만 |
| 선생님 | 자신이 생성한 룸 CRUD, 학생 초대(최대 100명)·퇴장·재수강 |
| 학생 | 직접 생성·가입요청 불가. 초대(이메일/링크)로만 입장. APPROVED 룸 조회 |
| 보호자 | 전용 API 없음. 연결된 자녀 활동을 통해 간접 조회 |
- 사용자당 스터디룸 생성 제한 5개, 룸당 로그 최대 1,000개
- 학생↔보호자 연결 각 4명
9. 열린 질문 / TODO¶
- 활성화/비활성화 토글 (TBD)
- 챌린지 기능이 StudyRoom 컨텍스트 안인지 글로벌인지 → teams/engineering/domains/challenge는
visibility컬럼으로 양립 - 스터디룸 육성/프리미엄 기능 (성진 제안, 추후 BM)