Class 모듈
학원의 반(학급) 생성·수정·삭제, 학생 수강 등록·취소, 수강 현황 조회 및 대시보드 통계를 담당하는 모듈입니다. 패키지 이름은 com.lumie.classroom입니다.
모듈 개요
| 항목 | 내용 |
|---|---|
| Gradle 서브프로젝트 | modules/class |
| 베이스 패키지 | com.lumie.classroom |
| 데이터베이스 | PostgreSQL (멀티테넌트 RLS, classes / class_enrollments 테이블) |
| 외부 노출 internal-api | ClassService |
주요 책임
- 반 개설·수정·삭제
- 담당 강사(teacherId) 지정
- 수업 일정 패턴(요일별 시작·종료 시간) 관리 —
SchedulePatternJSONB 저장 - 학생의 반 수강 등록·취소·수료 처리
- 반별 수강 현황 및 대시보드 통계 집계
도메인 모델
ClassEntity 엔티티
@Entity
@Table(name = "classes")
public class ClassEntity extends TenantScopedEntity {
private Long id;
@Version Long version;
String name;
Long teacherId;
SchedulePattern schedulePattern; // JSONB — 요일·시간 패턴
String description;
}
SchedulePattern은 jsonb 컬럼에 직렬화되며, 요일별 수업 세션 목록(sessions)을 기준으로 저장합니다. 각 세션은 day, startTime, endTime을 가지며, 기존 days, startTime, endTime 필드는 호환용으로 유지됩니다. 모든 세션 시간이 같을 때만 호환용 시작·종료 시간이 채워지고, 요일별 시간이 다르면 호환용 시간 필드는 null입니다.
ClassEnrollment 엔티티
@Entity
@Table(name = "class_enrollments",
uniqueConstraints = @UniqueConstraint(columnNames = {"class_id", "student_id"}))
public class ClassEnrollment extends TenantScopedEntity {
private Long id;
@Version Long version;
ClassEntity classEntity;
Long studentId;
Instant enrolledAt;
Instant droppedAt;
EnrollmentStatus status; // ENROLLED | DROPPED | COMPLETED
}
한 학생은 한 반에 하나의 수강 레코드만 가질 수 있습니다 (unique_constraint).
EnrollmentStatus
| 값 | 의미 |
|---|---|
ENROLLED | 수강 중 |
DROPPED | 수강 취소됨 |
COMPLETED | 수료 완료 |