Ders Sistemi
Modül: src/modules/lesson
Ders sistemi, platformun temel içerik katmanıdır. Tüm AI özellikleri, eksiklik tespiti, kazanım takibi ve ödev sistemi bu yapı üzerine inşa edilmiştir.
Hiyerarşi
Lesson (Ders)
└── LessonSection (Bölüm) [sıralı]
└── LessonSectionContent (İçerik) [sıralı]
├── LessonSectionContentGain (Kazanım bağlantısı)
├── LessonSectionContentTimes (Video transcript zaman damgaları)
└── LessonSectionExamQuestion (Sınav sorusu — sadece EXAM tipinde)
└── LessonSectionExamQuestionGain (Soru-kazanım bağlantısı)
Her katman order alanıyla sıralanır. Bölümler ve içerikler bu değere göre listelenir.
Tablolar
Lessons
Ana ders kaydı. Temel alanlar:
| Alan | Tip | Açıklama |
|---|---|---|
id |
STRING | lesson_ prefix'li |
title |
STRING | Ders başlığı |
isActive |
BOOLEAN | false → öğrencilere görünmez |
isDownloadable |
BOOLEAN | İçerik indirilebilir mi? |
isCertificate |
BOOLEAN | Bitirince sertifika verilsin mi? |
isCommentable |
BOOLEAN | Öğrenciler yorum yapabilir mi? |
isVotable |
BOOLEAN | Öğrenciler oy verebilir mi? |
isQa |
BOOLEAN | Soru-cevap bölümü açık mı? |
coverMediaId |
STRING | Kapak görseli (media tablosu) |
paranoid: true |
— | Soft delete — silinen dersler fiziksel silinmez |
LessonSections
Ders bölümleri. Her bölümün bir lessonId ve bir order değeri var.
LessonSectionContents
Bölüm içerikleri. type alanı içeriğin ne olduğunu belirler:
| Tip | Açıklama |
|---|---|
VIDEO |
Video içerik (mediaId ile bağlı) |
AUDIO |
Ses dosyası |
IMAGE |
Görsel |
TEXT |
Zengin metin (HTML/markdown) |
FILE |
PDF veya dosya |
CODE |
Kod bloğu |
EXAM |
Sınav — altında LessonSectionExamQuestion kayıtları olur |
LessonSectionContentGains
Bir içerikteki (genellikle video) kazanım bağlantısı. Video için startTime/endTime alanları MM:SS veya HH:MM:SS formatında saklanır. Bu aralıklar Eksiklik Öğretmeni ve kazanım raporları tarafından kullanılır.
AI üretimli alanlar:
aiExplanation— Kazanım için AI'ın ürettiği açıklama metniaiExamples— AI'ın ürettiği örnek listesi (JSON array)aiGeneratedAt— AI içeriği üretim tarihi
LessonSectionContentTimes
Video içeriğin transcript kayıtları. Her kayıt bir startTime/endTime aralığı ve o aralıktaki content metnini tutar. AI Öğretmenin video bölümü özetlemesinde ve Eksiklik Öğretmeninin bağlam oluşturmasında kullanılır.
LessonSectionExamQuestions
Tip EXAM olan bir içeriğin altındaki sorular. Soru tipi metin, görsel, ses, video, dosya veya kod olabilir.
LessonSectionExamQuestionGains
Sınav sorusu ile LessonSectionContentGain arasındaki many-to-many bağlantı tablosu. Bu bağlantı sayesinde hangi sorunun hangi kazanımı ölçtüğü bilinir — eksiklik tespiti algoritması bunu kullanır.
Kullanıcı Takip Tabloları
UserLessonSectionContentTrackings
Öğrencinin hangi içerikleri ne kadar izlediğini saklar.
| Alan | Açıklama |
|---|---|
status |
VIEWED, IN_PROGRESS, COMPLETED |
startDate / endDate |
İzleme başlangıç/bitiş zamanı |
duration |
Toplam izleme süresi (saniye, float) |
UserLessonSectionExams
Öğrencinin sınav girişi. Durumlar: IN_PROGRESS, COMPLETED.
UserLessonSectionExamAnswers
Öğrencinin verdiği cevaplar. Bu tablo eksiklik tespiti algoritmasının ham verisidir.
Katılımcı ve Sorumlu
LessonParticipants
Derse kimin erişebileceğini belirler. type alanına göre:
USER— tek bir kullanıcıDEPARTMENT— tüm departmanNONE— kısıtlama yok
LessonResponsibles
Dersden sorumlu öğretmeni ve hangi departmanla ilişkili olduğunu belirler. Bir derse birden fazla sorumlu atanabilir.
Diğer Özellikler
- Yorum (
LessonComments):isCommentable: trueise öğrenciler yorum bırakabilir - Oy (
LessonVotes):isVotable: trueise öğrenciler ders puanı verebilir - Soru-Cevap (
LessonQAs):isQa: trueise öğrenciler soru sorabilir, öğretmen cevaplayabilir - Not (
LessonNotes): Öğrencinin derse kişisel not eklemesi
Kazanım Sistemi
Kazanımlar (gain) ayrı bir modül değil, lesson modülünün parçası.
LessonSectionContentGains tablosu şunu sağlar: her ders içeriği, bir veya birden fazla kazanımla etiketlenir. Video içeriklerinde bu etiket video zamanıyla da ilişkilendirilir — "bu kazanım videonun 04:30–07:15 arasında işleniyor" gibi.
Bu yapı üç şeyi mümkün kılar:
- Eksiklik tespiti — Öğrenci sınavda yanlış yaptığında hangi kazanımda eksik olduğu bilinir
- Eksiklik öğretmeni — AI'a "bu kazanımla ilgili videodan alıntı göster" diyebilmek için zaman aralığı bilgisi var
- Kazanım raporları — Departman bazında hangi kazanımlar ne kadar çözülmüş, takip edilebilir
Kazanım rapor servisi: src/modules/gain/services/gain.report.service.js