Zum Hauptinhalt springen

Assignment 모듈

학원 반에 귀속된 과제 생성·수정·삭제, 학생 제출물 관리(등록·채점·반환), 과제 통계 집계를 담당하는 모듈입니다.

모듈 개요

항목내용
Gradle 서브프로젝트modules/assignment
베이스 패키지com.lumie.assignment
데이터베이스PostgreSQL (멀티테넌트 RLS, assignments / assignment_submissions 테이블)
외부 노출 internal-apiAssignmentService

주요 책임

  • 반(classId)에 귀속된 과제 생성·수정·삭제 및 활성/종료 전환
  • 학생 제출물 등록·채점(점수+피드백)·반환 처리
  • 첨부파일 ID 목록 관리 (JSONB, FileService 연계)
  • 과제 통계 집계 (제출율, 평균 점수 등)

도메인 모델

Assignment 엔티티

@Entity
@Table(name = "assignments")
public class Assignment extends TenantScopedEntity {
private Long id;
@Version Long version;
Long classId;
String title;
String description;
AssignmentType type; // HOMEWORK | PROJECT | QUIZ | EXAM
Instant dueDate;
Integer maxScore;
List<Long> attachments; // 첨부파일 ID 목록 (JSONB)
AssignmentStatus status; // ACTIVE | CLOSED
}

AssignmentSubmission 엔티티

@Entity
@Table(name = "assignment_submissions",
uniqueConstraints = @UniqueConstraint(columnNames = {"assignment_id", "student_id"}))
public class AssignmentSubmission extends TenantScopedEntity {
private Long id;
@Version Long version;
Long assignmentId;
Long studentId;
String content;
List<Long> attachments; // 제출 첨부파일 ID 목록 (JSONB)
Integer score;
String feedback;
Instant submittedAt;
Instant gradedAt;
SubmissionStatus status; // PENDING | SUBMITTED | GRADED | RETURNED
}

한 학생은 한 과제에 하나의 제출 레코드만 가질 수 있습니다 (unique_constraint).

AssignmentType

의미
HOMEWORK숙제 (기본값)
PROJECT프로젝트
QUIZ퀴즈
EXAM시험형 과제

SubmissionStatus

의미
PENDING미제출
SUBMITTED제출 완료
GRADED채점 완료
RETURNED교사가 피드백 후 반환

REST API

과제 관리 API — 기본 경로: /v1/assignments

메서드경로설명
POST/v1/assignments과제 생성 (201 Created)
GET/v1/assignments과제 목록 조회 (classId, type, status, 검색, 페이지)
GET/v1/assignments/\{id\}과제 상세 조회
PATCH/v1/assignments/\{id\}과제 수정
DELETE/v1/assignments/\{id\}과제 삭제
GET/v1/assignments/class/\{classId\}반별 과제 목록

정렬 허용 필드

createdAt, title, dueDate, status

제출물 관리 API — 기본 경로: /v1/assignments/\{assignmentId\}/submissions

메서드경로설명
GET/v1/assignments/\{assignmentId\}/submissions제출물 목록
POST/v1/assignments/\{assignmentId\}/submissions제출물 등록 (201 Created)
PATCH/v1/assignments/\{assignmentId\}/submissions/\{submissionId\}제출물 수정 (채점·반환 포함)
GET/v1/assignments/\{assignmentId\}/submissions/student/\{studentId\}학생별 제출물 조회

통계 API

메서드경로설명
GET/v1/assignments/\{id\}/statistics과제별 통계 (제출율, 평균 점수 등)

내부 API (libs/internal-api)

AssignmentService 인터페이스를 구현한 AssignmentServiceAdapteradapter/in/internal/에 위치합니다.

public interface AssignmentService {
Optional<AssignmentData> getAssignment(String tenantSlug, Long assignmentId);
AssignmentListData getAssignmentsByClass(String tenantSlug, Long classId, int page, int size);
}

멀티테넌시

assignmentsassignment_submissions 테이블 모두 tenant_id BIGINT NOT NULL을 가지며 RLS 정책이 적용됩니다.

관련 문서