과제 서비스
이 페이지는 lumie-backend/modules/assignment를 다룹니다.
책임
assignment 모듈은 다음을 소유합니다.
- class에 연결된 과제
- 학생별 제출물
- 과제 dashboard 통계
- ID 또는 class 기준 과제 조회를 위한 internal API
소스 경로
| Path | 역할 |
|---|---|
lumie-backend/modules/assignment/src/main/java/com/lumie/assignment/adapter/in/web | 공개 assignment, submission, statistics controller |
lumie-backend/modules/assignment/src/main/java/com/lumie/assignment/adapter/in/internal/AssignmentServiceAdapter.java | internal monolith API 구현 |
lumie-backend/modules/assignment/src/main/java/com/lumie/assignment/application/service | command, query, statistics service |
lumie-backend/modules/assignment/src/main/java/com/lumie/assignment/domain/entity | Assignment, AssignmentSubmission |
lumie-backend/libs/internal-api/src/main/java/com/lumie/assignment/api/AssignmentService.java | internal 조회 계약 |
lumie-backend/app/src/main/resources/db/migration/public/V18__rls_baseline.sql | baseline assignments, assignment_submissions table |
공개 인터페이스
| Surface | Entrypoints |
|---|---|
| Assignment CRUD | POST /v1/assignments, GET /v1/assignments, GET /v1/assignments/{id}, PATCH /v1/assignments/{id}, DELETE /v1/assignments/{id} |
| Class list | GET /v1/assignments/class/{classId} |
| Submission management | GET /v1/assignments/{assignmentId}/submissions, POST /v1/assignments/{assignmentId}/submissions, PATCH /v1/assignments/{assignmentId}/submissions/{submissionId}, GET /v1/assignments/{assignmentId}/submissions/student/{studentId} |
| Dashboard | GET /v1/assignments/statistics/dashboard |
내부 인터페이스
AssignmentService는 다음을 export합니다.
getAssignment(...)getAssignmentsByClass(...)
이 모듈은 다른 모듈에 submission 수정이나 grading 기능을 export하지 않습니다. internal consumer는 lookup 데이터만 받습니다.
집계와 테이블
| Aggregate | Table | 참고 |
|---|---|---|
Assignment | assignments | class ID, type, due date, max score, JSONB attachment ID, lifecycle status 저장 |
AssignmentSubmission | assignment_submissions | (assignment_id, student_id) unique, 내용/첨부/점수/피드백/상태 포함 |
두 aggregate는 custom converter를 통해 attachment ID 목록을 JSONB로 직렬화합니다. 직렬화 실패는 조용한 persistence 손상이 아니라 business exception으로 surface됩니다.