crowny-class admin.html — CVF 자동인코딩 진행표시 UI
개요
class.crowny.org:9864 관리자 페이지(public/admin.html)의 영상 업로드 흐름을,
"업로드 완료" 한 줄짜리 알림에서 서버 CVF 인코딩 잡(cvfStatus)을 폴링해
진행상태를 실시간으로 보여주는 UI로 개선. 서버(routes.js) 쪽 인코딩 판정/엔드포인트는
다른 세션(A) 담당 — 이 작업은
프론트(admin.html)만 수정, 서버 파일은 무접촉.
무엇을 했는지
- 영상 업로드 폼에 필드 추가
- 기존 제목/주차/레슨ID(자유입력)/파일 유지
-
레슨 배선 셀렉트 신규 추가(
#vLessonWire,
disabled) —
GET /api/lesson/curriculum에서
videoId 없는 레슨만 옵션으로 채움(정보용). 실제 "레슨.videoId = 이 영상 id" 배선 엔드포인트가
아직 없어(admin/lesson 모듈 미구현) 서버 라우트를 임의로 추가하지 않고
비활성 상태 + 안내문구
("인코딩 완료 후 레슨 배선은 추후 지원됩니다")로만 표시.
- 업로드 → CVF 인코딩 진행 폴링
- 기존 XHR 진행률(%) 업로드는 그대로 유지.
-
xhr.onload에서 응답 JSON에
cvfStatus가 있으면(
encoding) "업로드 완료 → CVF 인코딩 중…" 표시 후
GET /api/video/encode-status/<id>를 2.5초 간격으로 폴링.
-
cvfStatus === 'ready' → "✅ CVF 재생 준비 완료" (폴링 중단)
-
cvfStatus === 'error' → "❌ 인코딩 실패: {cvfError}" (폴링 중단)
- 그 외(
encoding 등) → 계속 폴링, 최대 200회(≈8.3분) 상한 후 새로고침 안내로 전환(무한폴링 방지)
- 네트워크/일시 오류는 5회까지 재시도 후 안내 전환
- 서버가 아직
cvfStatus를 안 내려주는 구버전 응답이면(A 배선 전) 기존처럼 "업로드 완료"만 표시
(하위호환 — 폴링 시작 안 함)
- 한선씨 동반(보너스):
한선씨/프론트카피.한선에 인코딩상태문구(상태) 함수 append —
admin.html의
encodeStatusLabel()과 동일 규칙(ready/error/encoding/미지 4상)의 개념 미러.
컴파일·실행 검증 완료(4개 케이스 전부 기대값 일치).
관련 파일
/Users/ef/crowny-class/public/admin.html — 유일하게 수정된 파일 (프론트 전용, 서버 무접촉)
/Users/ef/crowny-class/한선씨/프론트카피.한선 — 인코딩상태문구() 함수 append (라인 끝부분)
/Users/ef/crowny-class/API-CONTRACT.md — 계약 SSOT (참조만, 미수정)
/Users/ef/crowny-class/modules/video/routes.js — 참조 확인(현재 /api/video/upload가
cvfStatus를 안 내려줌,
/api/video/encode-status/<id> 라우트도 아직 없음 — A 세션의 남은 작업)
/Users/ef/crowny-class/modules/lesson/routes.js — 참조 확인(videoId 배선 엔드포인트 없음)
검증
- 태그 짝 검사(div/span/table/thead/tbody/tr/td/th/button/select/option/label/style/script 등) 전부 OK
- 인라인
<script> 블록 node --check PASS
curl http://127.0.0.1:9864/admin.html → HTTP 200 (서버 재기동 없이 static 서빙 확인)
- 프론트카피.한선 컴파일+실행 4상 검증 통과(
cd /Users/ef/CrownyOS/crownyc && ./hanseonc_high ... && ./crownyc run ...)
- 크라우니코드 학습: lookup HIT 0건 / MISS 1건(생성) / learn 추가 1건(
cvf인코딩상태라벨)
잔여 이슈 (다음 세션/A 담당)
POST /api/video/upload가 cvfStatus/cvf/cvfAudio 필드를 응답에 포함하도록 서버쪽 인코딩
잡 트리거(encode-upload.sh 배선) 필요 — 현재 이 필드 없이 응답하므로 프론트는 폴링 없이
"업로드 완료"만 표시 중 (하위호환 폴백 동작 확인됨, 실제 인코딩 파이프라인 배선 전이라 라이브 폴링은
아직 검증 불가 — cvfStatus 필드가 응답에 실리기 시작하면 자동으로 폴링 경로 동작).
GET /api/video/encode-status/<id> 라우트 자체가 아직 미구현 — A 배선 완료 후 admin.html 재확인 필요.
- 레슨 배선(레슨.videoId 설정) 서버 엔드포인트 신설 시
#vLessonWire를 활성화하고 제출 로직 추가.
- CrownyBrowser 전용 디자인대조.sh 훅(
.tabbar/.omni/.bm/.ib 등)이 이 파일에도 발동해 FAIL을
냈으나, 이는 브라우저 크롬 UI 규격이라 crowny-class 관리자 페이지에는 적용 대상이 아님(오탐).
실제 적용 규격은 API-CONTRACT.md의 크라우니디자인.css + class-type.css(이미 준수, 미변경).