lesson

Lesson

src/modules/lesson/schemas/lesson.schemas.ts · колекція academy_lessons

Урок у модулі. Поліморфний контент: текст / медіа / зображення / тест.

Поля

  • name — назва уроку
  • courseId, moduleId — посилання на курс/модуль
  • isHiddentrue приховує від Trainee
  • content[] — поліморфний масив LessonContentSimple | LessonContentTest

Типи контенту (LessonContentType)

  • mediaSimple (рядок-контент: посилання на відео)
  • imageSimple (рядок-URL зображення)
  • textSimple (текст)
  • testTest з 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().