수강 · 커리큘럼

강의를 보여 주고 성적표를 만든다. 볼 자격이 있는지 먼저 묻는다.

:8080
클래스
25
포트
4
interface
엔드포인트
15
화면
13
가드레일
53
critical 21

이 도메인의 자리

100%휠로 확대 · 끌어서 이동

이어진 곳

이 도메인이 쓰는 것 →

없다. 다른 도메인을 모른다.

← 이 도메인을 쓰는 곳

없다.

공용 모듈
common-appcommon-domaincommon-infrastructurecommon-securitycommon-utilscommon-web

다루는 테이블

원본 대응 myclass/*.php

타입 구조 (25)

Spring 소스를 직접 읽어 그린다. 계층 사이 화살표만 그렸다 — 타입 하나하나를 이으면 읽을 수 없다. 파란 테두리가 포트(interface)다.

100%휠로 확대 · 끌어서 이동
app 2domain 17infrastructure 4web 2

포트 (4) — 도메인이 바깥에 요구하는 것

도메인은 DB 도 HTTP 도 모른다. 필요한 것을 인터페이스로 선언하고, infrastructure 가 그것을 구현한다. 의존이 뒤집히는 지점이다.

이름하는 일메서드
CurriculumRepository
domain
-
DocumentStorage
domain
수강생 자료 파일 저장소.
LearnerRepository
domain
-
LectureProgressRepository
domain
강의 시청 진도.

도메인 모델 (13)

CertificateAddress
record
자격증을 받을 주소.
CertificateAddressEligibility
class
자격증 배송 주소를 넣을 수 있는가.
CertificateStatus
record
자격증 관련 상태.
CurriculumUnit
record
유닛과 그 레슨들.
LectureBook
record
강의 교재(PDF).
LectureProgress
record
강의 시청 진도.
Lesson
record
레슨.
LessonPlayLog
record
한 레슨의 재생 기록 전체.
LessonProgress
record
한 레슨의 진도 요약.
PlaySession
record
재생 기록 한 건.
ScoreReport
record
과정 성적표.
StudentDocument
record
수강생에게 내려 주는 파일 한 건.
StudentInfo
record
학생 정보.

유스케이스 (2)

CourseCatalog
33
과정별 상수.
lastUnit()kindsHighestFirst()hasExam()
LearningUseCase
226
수강 관련 조회.
curriculum()lesson()scoreReport()studentInfo()recordProgress()lessonProgress()courseProgress()certificateAddress()

엔드포인트 (15)

100%휠로 확대 · 끌어서 이동
메서드경로컨트롤러
GET/api/learning/admin/courses/{course}/units관리자AdminCurriculumController
GET/api/learning/admin/members/{memberId}/progress관리자AdminCurriculumController
GET/api/learning/my-coursesLearningController
GET/api/learning/courses/{course}/curriculumLearningController
GET/api/learning/courses/{course}/score-reportLearningController
GET/api/learning/lessons/{course}/{unit}/{lesson}LearningController
GET/api/learning/students/meLearningController
POST/api/learning/progressLearningController
GET/api/learning/progress/{unit}/{lesson}LearningController
GET/api/learning/progressLearningController
GET/api/learning/students/me/certificate-addressLearningController
POST/api/learning/students/me/certificate-addressLearningController
GET/api/learning/students/me/entranceLearningController
GET/api/learning/students/me/scanLearningController
GET/api/learning/students/me/booksLearningController

화면 흐름 (13개 화면)

이 도메인이 받는 화면끼리의 이동입니다. 다른 도메인으로 나가는 이동까지 함께 보려면 화면 흐름 → 수강 · 커리큘럼 으로 갑니다.

100%휠로 확대 · 끌어서 이동

이 도메인을 쓰는 화면 (13)

critical 가드레일 (21)

  • books-require-login
    로그인하지 않으면 강의 교재를 받을 수 없다.
  • books-require-course-access
    수강 권한이 없는 과정의 교재는 받을 수 없다.
  • books-not-servable-by-asset-path
    교재는 공개 자산 경로로 열리지 않는다.
  • classroom-no-quiz-when-closed
    수강기간이 아니거나 미결제면 응시 버튼이 나오면 안 된다.
  • score-average-excludes-failed
    평균의 분모는 합격 유닛 수여야 한다. 전체 유닛 수로 나누면 안 된다.
  • profile-change-requires-login
    로그인하지 않으면 이름 · 영문 이름을 바꿀 수 없다.
  • document-path-stays-in-kind-dir
    DB 의 파일 경로가 자료 종류 디렉터리를 벗어나면 읽지 않아야 한다.
  • document-requires-login
    토큰 없이 자료를 받을 수 없어야 한다.
  • student-scan-requires-pass
    합격 전에는 스캔본 다운로드가 노출되지도, API 로 받아지지도 않아야 한다.
  • student-own-data-only
    항상 로그인한 본인 정보만 나와야 한다.
  • certificate-address-requires-issued
    합격 + 자격증발급이 아니면 배송 주소를 조회도 저장도 할 수 없어야 한다.
  • certificate-address-own-only
    요청에 회원을 담아 보내도 남의 주소를 바꿀 수 없어야 한다.
  • progress-percent-from-server
    시청 비율은 서버가 seconds/duration 으로 계산해야 한다. 요청값을 쓰면 안 된다.
  • progress-own-only
    요청에 회원을 담아 보내도 남의 진도를 조작·조회할 수 없어야 한다.
  • progress-requires-login
    비로그인은 기록도 조회도 할 수 없어야 한다.
  • video-requires-entitlement
    수강권이 없는 사용자가 영상 정보를 받아가면 안 된다.
  • myclass-shows-only-entitled
    수강권이 없는 과정은 입구가 열려 보이면 안 된다.
  • classroom-tec-uses-tec-flags
    TESOL 수강권만 있는 사용자에게 TEC 강의실이 열리면 안 된다.
  • student-tec-uses-tec-columns
    TEC 화면에 TESOL 합격여부·자격증여부가 표시되면 안 된다.
  • phonics-requires-own-flag
    TESOL 수강권만으로 파닉스 강의실이 열리면 안 된다.
  • teaching-requires-own-flag
    teaching_yn 이 Y 가 아니면 열리면 안 된다.