Ödev, Görev ve Planlama
Ödev Sistemi (whomework)
Modül: src/modules/whomework
Ödevler, öğrenciye belirli bir ders içeriğini belirli bir tarihe kadar tamamlaması için gönderilen kayıtlardır. Ödev doğrudan oluşturulmaz — akademik takvim üzerinden toplu gönderilir.
Homeworks Tablosu
| Alan | Açıklama |
|---|---|
userId |
Ödevin gönderildiği öğrenci |
lessonId |
Bağlı ders |
lessonSectionId |
Ders bölümü |
lessonSectionContentId |
Yapılacak içerik |
status |
PENDING, STARTED, COMPLETED, FAILED |
deadline |
Son teslim tarihi |
finishedAt |
Öğrencinin tamamladığı tarih |
isActive |
Ödev aktif mi? |
Her ödev, doğrudan bir ders içeriğine bağlıdır. Öğrenci o içeriği izleyince veya tamamlayınca ödev durumu güncellenir.
Akademik Takvim (wacademic)
Modül: src/modules/wacademic
Öğretmenin haftalık ders planını oluşturması ve ödev göndermesi için kullanılan sistem.
Yapı
LessonAcademicCalendar (Haftalık plan başlığı)
└── LessonAcademicCalendarItem (Haftalık plan satırı — hangi departmana, hangi içerik)
LessonAcademicCalendars — Öğretmenin (userId) belirli bir ders için (lessonId) oluşturduğu haftalık plan. week (1–52) ve year ile tanımlanır.
LessonAcademicCalendarItems — Bir haftalık plandaki her satır: hangi departmana, hangi bölüm/içerik işlenecek. Durum: WAITING → COMPLETED.
Ödev Gönderme (sendHomework)
Akademik takvim üzerinden ödev gönderildiğinde şunlar olur:
- Hedef departman(lar) ve ilgili takvim öğeleri (
WAITINGdurumundakiler) seçilir - Departman ağacı yinelemeli olarak çözülür — alt departmanlar da dahil edilir
- Her kullanıcı için aynı içeriğe ödev zaten varsa atlanır (duplicate kontrol)
- Ödev kaydı her kullanıcı için ayrı oluşturulur
- Deadline: bugünden
expDaygün sonra, saat 20:59:59 - Her takvim öğesi
COMPLETEDolarak işaretlenir - Tüm hedef departmanlara bildirim gönderilir
Her takvim öğesi ayrı bir transaction içinde işlenir — birinde hata olursa sadece o öğe rollback olur, diğerleri etkilenmez.
Görev Sistemi (task)
Modül: src/modules/task
Yöneticilerin departman veya bireysel kullanıcılara görev ataması için kullanılan sistem. Ödevden farkı: ders içeriğine bağlı değil, serbest tanımlı iş atamaları.
Tablolar
task
| Alan | Açıklama |
|---|---|
frequency |
ONCE, DAILY, WEEKLY, MONTHLY |
format |
TEXT (yazılı), FILE (dosya), BOTH |
startDate / endDate |
Görev geçerlilik aralığı |
createdBy |
Görevi oluşturan kullanıcı |
task_department — Görevin hangi departmanlara atandığı.
task_user — Görevin hangi bireysel kullanıcılara atandığı.
task_submission — Görev teslimi.
| Alan | Açıklama |
|---|---|
content |
Yazılı teslim içeriği |
attachments |
JSON — dosya bağlantıları |
status |
PENDING, APPROVED, REJECTED |
reviewedBy / reviewNote |
İnceleyenin notu |
periodKey |
Tekrarlayan görevlerde hangi periyot (örn. "2025-W12") |
periodStart / periodEnd |
Periyot tarih aralığı |
Görünürlük Kuralı
Kullanıcı görev listesini çektiğinde şunları görür:
- Kendi departmanına atanmış görevler
- Doğrudan kendisine atanmış görevler
- Kendisinin oluşturduğu görevler
isSuperAdmin ise tüm görevleri görür.
Yapılacaklar (todo)
Modül: src/modules/todo
Öğrencinin kişisel yapılacaklar listesi ve günlük rutin yönetimi.
todoItem — Yapılacak Maddesi
| Alan | Açıklama |
|---|---|
todoCategoryId |
Kategoriye bağlı |
taskId / taskSubmissionId |
Bir görevden dönüştürülmüşse bağlantı |
isTask |
Sistem görevi mi yoksa kişisel mi? |
priority |
low, medium, high, critical |
estimatedTimeValue / estimatedTimeUnit |
Tahmini süre (dakika/saat/gün) |
completed / cancelled |
Durum bayrakları |
dailyRoutine — Günlük Rutin
Öğrencinin her gün tekrarladığı alışkanlıklar. Sıralı, renkli ve öncelik seviyeli.
smartRoutineSuggestion — Akıllı Rutin Önerisi
Hata defteri verisinden türetilen haftalık çalışma planı önerisi.
| Alan | Açıklama |
|---|---|
lessonId / lessonName |
Hangi ders için |
weekStartDate / weekEndDate |
Hangi hafta için |
sourceMonth / sourceYear |
Hataların alındığı ay |
totalErrors |
Toplam hata sayısı |
dailyTarget |
Günlük çözülmesi gereken soru hedefi (yuvarlanmış) |
weeklyTarget |
Haftalık toplam hedef |
completedQuestions |
Tamamlanan soru sayısı |
status |
active, completed, expired |
Unique constraint: bir kullanıcı için aynı ders + aynı hafta başlangıcı kombinasyonu tekrar oluşturulamaz.
Ders Planı (wplan)
Modül: src/modules/wplan
Okulun haftalık ders programı (ders çizelgesi) oluşturma sistemi.
Temel Modeller
| Model | Açıklama |
|---|---|
PlanClasses |
Sınıf tanımı. departmentIds (JSONB) ile departmanlara bağlıdır. Sınıf adı unique. |
PlanTeachers |
Öğretmen kaydı |
PlanLessons |
Planlamada kullanılan ders tanımı |
PlanTeacherLessonAssignments |
Hangi öğretmen hangi dersi verebilir |
PlanTeacherBranchAssignments |
Öğretmenin branş atamaları |
PlanTeacherAvailability |
Öğretmenin müsait olduğu gün/saat bilgisi |
PlanClassSchedule |
Sınıfın haftalık program çizelgesi |
PlanClassLessonAssignment |
Sınıfa atanan ders ve haftalık saat sayısı |
PlanScheduleEntries |
Program girişleri (gün + saat dilimi + öğretmen + ders) |
PlanTimeTable |
Oluşturulan ders programı |
PlanDepartmentDailyHours |
Departman bazında günlük ders saatleri |
PlanSettings — Global Plan Ayarları
| Alan | Varsayılan | Açıklama |
|---|---|---|
workingDays |
5 | Çalışma gün sayısı (1–7) |
dailyMaxLessons |
8 | Günlük maksimum ders (1–12) |
lessonDuration |
40 dk | Ders süresi (30–90 dk) |
breakBetweenLessons |
10 dk | Dersler arası teneffüs (0–30 dk) |
maxConsecutiveLessons |
3 | Art arda verilebilecek maksimum ders |
preventConsecutiveSameLessons |
true | Aynı dersin arka arkaya olmasını engelle |
maxDailySameLesson |
0 | Aynı dersin günde maksimum kaç kez olabileceği (0 = sınırsız) |
schoolStartTime |
08:30 |
Okul başlangıç saati |
lunchBreakStart |
12:00 |
Öğle arası başlangıcı |
lunchBreakDuration |
60 dk | Öğle arası süresi |
workingDaysList |
Pzt–Cum | Aktif çalışma günleri (JSONB array) |
considerTeacherPreferences |
true | Öğretmen tercihlerini dikkate al |
balanceWorkload |
true | Öğretmen iş yükünü dengele |