콘텐츠로 이동
✍️ 수정가능누구나 고쳐도 됩니다. 고치면 하단 frontmatter의 갱신일·작성자·변경요약을 남겨 주세요.작성 Claude · 2026-06-05 · 엔티티(임베디드 제출/피드백)·enum·API·cascade를 백엔드 코드와 정렬

과제 도메인 (Homework)

1. 한 줄 정의

스터디룸에서 선생님이 출제한 과제와, 학생이 답글(질문/답변) 형식으로 제출하고 피드백받는 흐름. 학습 과정 추적·성취 관리의 기반.

2. 핵심 개념

  • Homework — 과제 본체. title, content(MEDIUMTEXT), deadline(LocalDateTime, nullable), reminderOffsets(ReminderOffset 집합 — homework_reminder ElementCollection). FK는 study_room_id 1개(룸 직속). 대상 학생은 본체 컬럼이 아니라 HomeworkStudent 매핑으로 배정
  • HomeworkStudent — 학생별 배정·제출·피드백 매핑. submissionStatus enum(SubmissionStatus): NOT_SUBMIT / SUBMIT / LATE_SUBMIT. 제출 내용은 SubmissionInfo, 피드백은 FeedbackInfo임베디드(별도 엔티티 아님), readAt(학생 읽음 시각)
  • 제출(답글) — 텍스트 본문 + 첨부. 마감 후 제출은 LATE_SUBMIT
  • 피드백 — 선생님이 HomeworkStudent.feedback(FeedbackInfo) 작성·수정·삭제
  • TeachingNoteHomework — Homework ↔ TeachingNote 연결은 직접 FK가 아니라 teaching_note_homework 조인 엔티티(M:N) → teaching-note

3. 관련 코드

  • mvp-back:domain/homework, mvp-back:application/service/homework, mvp-back:presentation/controller/homework
  • soft delete: HomeworkEntity/HomeworkStudentEntity/TeachingNoteHomeworkEntity 각각 @SQLDelete+@SQLRestriction. (HomeworkDeletePolicy 같은 공통 클래스는 없음 — 직접 선언)
  • mvp-front:src/app/(private)/studyroom 내 과제 섹션

주요 API (HomeworkController, prefix /api)

Method Path 설명
GET /teacher\|student/study-rooms/{studyRoomId}/homeworks[/{homeworkId}] 목록·상세
GET /parent/student/{studentId}/study-rooms/{studyRoomId}/homeworks/{homeworkId} 보호자 조회
POST/PATCH/DELETE /teacher/study-rooms/{studyRoomId}/homeworks[/{homeworkId}] 생성·수정·삭제
POST/PATCH/DELETE /student/study-rooms/{studyRoomId}/homework-students[...] 제출(생성)·수정·취소
POST/PATCH/DELETE /teacher/study-rooms/{studyRoomId}/homework-students/{homeworkStudentId}/feedback 피드백 CRUD

4. 상태/생명주기

HomeworkStudent.submissionStatus: NOT_SUBMIT → SUBMIT
                                            → LATE_SUBMIT (deadline 이후 제출)

과제 제출은 마감(deadline) 이후에도 허용하되 LATE_SUBMIT로 표시. 주의: 현재 StudyRoomService.deleteStudyRoomCascade는 과제를 연쇄 삭제하지 않는다(수업노트 계열만). 룸→과제 cascade는 미구현 → studyroom §4.

5. 외부 의존

6. UI 노출

  • 과제 생성(선생님): 제목/내용/기한/대상/노트 링크
  • 과제 제출(학생): 답글 형식 + 첨부
  • 과제 관리(선생님): 제출 현황 요약(제출/미제출/지연), 정렬, 피드백
  • 과제 보기(학생/보호자): 학생=제출 후 피드백 확인, 보호자=보기 전용

7. 권한 / 정책 요약

역할 권한
선생님 생성·수정·삭제·피드백
학생 지정(배정) 과제만 제출·수정. 같은 과제 다른 학생의 제출 완료 답안 조회 가능
보호자 연결 자녀 과제 제출 여부·피드백 보기 전용
  • 과제는 별도 공개정책 없이 배정(HomeworkStudent) 여부로 접근 결정
  • 필수 항목 누락 시 생성 불가, 기한이 현재 시각 이전이면 경고
  • 첨부 확장자/용량 제한은 에디터 업로드 정책 따름
  • 역할별 접근 권한 SSOT는 member §7

8. 결정 이력 / TODO

  • [MS3] 과제 관리 FDD → 과제 관리 개발 명세 (FRD)
  • 통계 보기(제출률·지연 비율·평균 제출 시간) — 확장 고려
  • 챌린지식 풀이가 Homework와 별개인지 통합인지 → challenge는 출제 주체·범위 다름으로 별개 유지 (ADR-0006 예정)