Publication versioning

Course editor làm việc trên draft. Learner-facing content đọc từ publication snapshot. Đây là lý do teacher sửa bài xong chưa chắc học viên thấy ngay cho tới khi submit/approve và class dùng đúng version.

Luồng chính

Teacher edit draft
-> submit-for-approval
-> Admin/ORG_ADMIN approve
-> CoursePublicationService tạo snapshot trong course_publications
-> LearningClass chọn latest hoặc pinned publication
-> Student learning API đọc effective publication

Bảng và migration

Migration/table Ý nghĩa
V92__course_publications_and_version_modes.sql Tạo course_publications, thêm version_mode cho learning class
course_publications Snapshot detail + content, có publication_number
V94__learning_classes_publication_fk.sql FK từ learning_classes.course_version_id sang course_publications.id
learning_classes.version_mode Cách lớp dùng version: pinned hoặc latest/follow

File nguồn cần nhớ

File Vai trò
CoursePublicationService Tạo và resolve snapshot publication
GetCoursePublicationsUseCase Trả timeline version kèm adoption metrics
BulkAdoptPublicationUseCase Pin nhiều lớp vào một publication trong một transaction
TeacherCoursesControllerV3 Endpoint publicationsadopt-all
CourseQueryControllerV3 Query course detail/content theo draft hoặc published snapshot

Câu trả lời mẫu

Nếu thầy hỏi “vì sao sửa video rồi học viên chưa thấy?”, trả lời:

LMS tách draft và publication. Teacher sửa trong draft, còn học viên đọc snapshot đã publish để tránh nội dung đang soạn làm hỏng lớp đang học. Muốn học viên thấy thay đổi thì course cần được submit/approve để tạo publication mới, sau đó class follow latest hoặc được bulk adopt/pin sang publication đó.

Rủi ro cần kiểm tra khi sửa

  • Không đọc draft cho học viên thường.
  • Không cập nhật class nửa chừng nếu bulk adopt lỗi; BulkAdoptPublicationUseCase chạy transaction để rollback toàn bộ.
  • Khi course đã APPROVED, thêm internal video mới cần submit/approve lại trước learner smoke.