Lesson
src/modules/lesson/schemas/lesson.schemas.ts · колекція academy_lessons
Урок у модулі. Поліморфний контент: текст / медіа / зображення / тест.
Поля
- name — назва уроку
- courseId, moduleId — посилання на курс/модуль
- isHidden —
trueприховує від Trainee - content[] — поліморфний масив
LessonContentSimple | LessonContentTest
Типи контенту (LessonContentType)
- media —
Simple(рядок-контент: посилання на відео) - image —
Simple(рядок-URL зображення) - text —
Simple(текст) - test —
Testзquestion({text, img, type: radio|checkbox|text}) і масивомanswers[]({id, text, img, isCorrectAnswer})
Нюанси
- Поліморфний
content[]. В Mongoose оголошений як[Object]; у Swagger через@ApiExtraModels(LessonContentSimple, LessonContentTest, LessonTestAnswer). update.changedIds— список ID питань тесту що змінились. Сервіс$pullз усіх існуючихAnswer.resultsцього уроку записи з цимиid→ Trainee мають перездати тільки змінені питання, не весь урок.isHiddenзміна тригерить перерахунокcurrentLessonусіх Trainee (як в module).- Видалення уроку — каскад: відповіді (
answerModel.deleteMany({lessonId})) + сам урок + видалення зmodule.lessonPositions. copy(lesson-service) — копіює уроки в інший модуль. Внутрішньо викликаєcreateз примусовою роллюdirector→ обходитьallowEdit-перевірку.changeStatus(метод lesson-service) — ручний перехідFinished/InProgressдля Trainee: створює/видаляє пустийAnswerзdateChecked = Date.now().