TESOL 성적표

CLASS-RESULT-OF-COURSE · /my-class/result-of-course

실제 화면 열기 ↗
기능
3
API 호출
0
가드레일
3
id 가 테스트 이름
구현 단계
5 / 5
완료수강 · 커리큘럼wvctesol-api :8080로그인 필요서버 컴포넌트16

개발 스펙

이 화면에서 할 수 있어야 하는 것 (1)

  • 유닛별 점수와 전체 평균을 본다.

비즈니스 규칙 (3)

  • 통과한 유닛만 점수가 잡힌다. 가장 나중 차수부터 거슬러 올라가 70점 이상인 첫 점수를 쓴다(C→B→A).
    근거: resultOfCourse.php:110~121
  • 통과하지 못한 유닛은 0점이고 평균 계산에서 빠진다.
    근거: resultOfCourse.php:121
  • Unit Total = 합격 유닛 점수 합 ÷ 합격 유닛 수, 소수점 2자리.
    근거: resultOfCourse.php:143

API (1)

메서드경로권한모듈 · 설명
GET/api/learning/courses/{course}/score-report수강생
성적표.
domains:learning:learning-web
응답: { rows: [{ unit, label, studentScore, score }], average, passedUnits }

가드레일 (3) — id 가 곧 테스트 이름이다

id반드시 만족해야 하는 것등급
score-average-excludes-failed
평균의 분모는 합격 유닛 수여야 한다. 전체 유닛 수로 나누면 안 된다.
critical
score-picks-latest-passing-kind
A 불합격 후 B 합격이면 B 점수가 잡혀야 한다.
high
score-no-passed-units-is-zero
합격 유닛이 하나도 없으면 평균이 0 이어야 한다(0 나누기 금지).
high

구현 계획 (5/5)

  1. CurriculumUnit · ScoreReport · StudentInfo · 포트 2개learning-domain
  2. LearningUseCase · CourseCataloglearning-app
  3. Curriculum · Learner 어댑터learning-infrastructure
  4. /api/learning/courses/{course}/score-report 구현learning-web
  5. Next.js 를 BFF 로 전환 — Prisma 직접 접근 제거wvctesol

서버 사이드 구현 계획 — 자바 객체별 요구사항 (5/5)

객체모듈책임 · 지켜야 할 것
ScoreReport
record
learning-domain
성적표 계산. 원본 resultOfCourse.php:99~143.
  • 평균의 분모는 합격 유닛 수다. 전체 유닛 수로 나누면 안 된다.
  • 통과한 유닛에서 가장 나중 차수부터 거슬러 올라가 70점 이상인 첫 점수를 쓴다(C→B→A).
  • 합격 유닛이 0 이면 0 을 돌려준다 — 0 으로 나누지 않는다.
  • BigDecimal 로 소수점 2자리를 만든다. double 은 표시가 흔들린다.
CourseCatalog
class
learning-app
과정별 상수(유닛 수 · 차수 순서 · 시험 유무).
  • 원본이 _Env.php 와 _exam*.php 에 흩어 두었던 값을 한곳에 모은다.
  • PHONICS·TEACHING 은 hasExam=false — 이 과정에는 시험이 없다.
LearningUseCase
service
learning-app
커리큘럼 · 성적표 · 학생정보 조회.
  • 모든 조회가 수강권 확인을 먼저 한다. 과정마다 보는 플래그가 다르다.
  • memberId 는 토큰에서만 온다 — 파라미터로 받으면 남의 성적표를 볼 수 있다.
CurriculumRepositoryAdapter
class
learning-infrastructure
unit · lesson 조회.
  • unit · lesson 이 정본이다. 화면에 배열로 두면 DB 와 어긋난다(UNIT2 레슨 누락 버그의 원인).
  • left join 이라 레슨이 없는 유닛도 목록에 남는다.
LearnerRepositoryAdapter
class
learning-infrastructure
수강 자격 · 성적 · 학생정보 조회.
  • 과정별로 컬럼을 통째로 갈아 끼운다 — TESOL 은 pass_yn/certi_yn/entrance, TEC 은 *_tec_yn.
  • 스캔본 노출은 조건이 하나 더 붙는다: 결제+준비완료 **+ 사이버승인 + 합격**.
  • 합격일은 pass_date 앞 8자리를 YYYY-MM-DD 로 자른다.

테스트 방법 (3)

가드레일종류확인 방법
score-average-excludes-failedunit2개 유닛만 통과한 계정의 Unit Total 이 (합/2) 여야 한다
score-picks-latest-passing-kinde2eUNIT2 가 A 0점 · B 100점일 때 성적표의 UNIT2 점수가 100
score-no-passed-units-is-zeroe2e통과 유닛이 없는 계정의 Unit Total 이 0 이고 예외가 없다

스냅샷

로그인 세션으로 촬영한 실제 화면입니다.

CLASS-RESULT-OF-COURSE 스냅샷

기능 목록 (3)

인증
  • ·세션 확인
  • ·로그인 필요proxy 가 /login 으로 보냄
하드코딩
  • ·하드코딩 데이터tabs

화면 이동

← 이 화면으로 오는 곳

없음

이 화면에서 가는 곳 →

연결

API

직접 호출하는 API 가 없습니다

소스
src/app/my-class/result-of-course/page.tsx