Kullanıcı Aktivitesi
Zaman Takibi (time-tracking)
Modül: src/modules/time-tracking
Kullanıcının platformda ne kadar zaman geçirdiğini, hangi modüllerde aktif olduğunu ve odak seanslarını takip eder.
Varlık (Presence) Takibi
PresenceSessions tablosu, kullanıcının hangi sayfada ne kadar aktif olduğunu kaydeder.
| Alan | Açıklama |
|---|---|
moduleKey |
Hangi modülde (örn. "lessons", "time-center") |
pathname |
Sayfa URL'si |
status |
Oturumun nasıl kapandığı |
activeSeconds |
Toplam aktif saniye |
lastHeartbeatAt |
Son heartbeat zamanı |
Oturum kapanış sebepleri (status):
| Değer | Ne zaman |
|---|---|
active |
Hâlâ devam ediyor |
idle_closed |
Kullanıcı idle'a geçti |
hidden_closed |
Tarayıcı sekmesi gizlendi |
route_changed |
Farklı sayfaya geçildi |
logout_closed |
Kullanıcı çıkış yaptı |
stale_closed |
65 saniye heartbeat gelmedi — otomatik kapatma |
Stale eşiği: STALE_HEARTBEAT_MS = 65000 — Frontend'den heartbeat gelmesi beklenir. 65 saniyeyi aşarsa oturum stale_closed olarak işaretlenir. Bu değer servis dosyasının başında sabit olarak tanımlıdır.
Odak Seansları (Focus Sessions)
FocusSessions — Kullanıcının başlattığı aktif çalışma seansları.
| Alan | Açıklama |
|---|---|
type |
timer, stopwatch, pomodoro |
status |
running, paused, cancelled, completed, ended |
goalDurationSeconds |
Timer modunda hedef süre |
elapsedSeconds |
Geçen toplam süre |
remainingSeconds |
Kalan süre (timer için) |
moduleKey |
Hangi modülden başlatıldı |
FocusSessionEvents — Her seansa ait olay günlüğü. Her durum değişikliği ayrı bir kayıt olarak tutulur:
started → paused → resumed → completed / cancelled / ended
Pomodoro'ya özgü event tipleri: phase_started, phase_completed, phase_skipped
Günlük İstatistikler
DailyUsageStats — Seanslar bittikten sonra özet istatistikler bu tabloya yazılır. Unique constraint: userId + date + moduleKey.
| Alan | Açıklama |
|---|---|
activeSeconds |
Varlık seanslarından toplam aktif süre |
focusSeconds |
Odak seanslarından toplam süre |
completedFocusCount |
Tamamlanan odak seansı sayısı |
completedPomodoroCount |
Tamamlanan pomodoro sayısı |
focusSessionCount |
Toplam odak seansı sayısı |
Liderboard
getLeaderboard metodu DailyUsageStats tablosunu sorgular:
- Seçilen metriği (
activeSeconds,focusSecondsvb.) tarih aralığında kullanıcı bazında toplar - Büyükten küçüğe sıralar, varsayılan limit 20
- Her satıra kullanıcı adı ve departman bilgisi eklenir
- Admin görünümü (
getAdminUsersActivityList)time_tracking_admin_viewyetkisi veyaisSuperAdmingerektirir
Hız Okuma (speed-reading)
Modül: src/modules/speed-reading
Ders sisteminden bağımsız, ayrı bir içerik hiyerarşisine sahip hız okuma modülü.
İçerik Hiyerarşisi
SpeedReadingCourse (Kurs)
└── SpeedReadingLesson (Ders — sesli anlatım)
SpeedReadingContent (Okuma parçası — sorulu)
SpeedReadingProfiles — Kullanıcı Profili
Her kullanıcı için bir profil kaydı tutulur (userId unique). Onboarding süreci tamamlanana kadar kullanıcı adım adım ilerler.
| Alan | Açıklama |
|---|---|
initialSpeed |
Kullanıcının başlangıçta beyan ettiği okuma hızı (kelime/dk) |
targetSpeedRange |
Hedef hız aralığı: 100-200, 200-400, 400-600, 600+ |
targetSpeed |
Hedef hız (üst sınır) |
readingProfile |
BEGINNER, INTERMEDIATE, ADVANCED, EXPERT |
readingLevel |
Kolay, Orta, Lise, Yetişkin |
dailyReadingGoal |
Günlük hedef (dakika) |
favoriteBookGenres |
Favori kitap türleri (max 3, JSON) |
currentSpeed |
Güncel ölçülen okuma hızı |
totalSessionCount / totalReadingTime |
Biriken istatistikler |
onboardingCompleted / onboardingStep |
Onboarding durumu |
SpeedReadingLessons — Sesli Ders
Sesli anlatımlı dersler. Gemini TTS ile ses üretilir.
| Alan | Açıklama |
|---|---|
rawTranscript |
Ham metin (admin tarafından girilir) |
cleanedTranscript |
Gemini tarafından temizlenmiş metin (YouTube/sosyal medya referansları çıkarılır) |
audioMediaId |
Üretilen ses dosyası |
audioDurationMs |
Ses süresi (ms) |
voice |
TTS sesi (varsayılan: "Kore") |
status |
DRAFT, PROCESSING, READY, FAILED |
SpeedReadingContents — Okuma Parçası
Okuma anlama egzersizleri için metin + soru setleri.
| Alan | Açıklama |
|---|---|
sourceKey |
Unique kaynak anahtarı |
categorySlug / categoryName |
İçerik kategorisi |
content |
Okuma metni |
questions |
JSON — anlama soruları ve cevapları |
questionCount |
Soru sayısı (varsayılan: 5) |
wordCount / characterCount |
Metin istatistikleri |
difficultyLevel |
Zorluk seviyesi |
Hedefler (goal)
Modül: src/modules/goal
Kullanıcıların benimseyebileceği hedef şablonları sistemi.
Tablolar
Goals — Sistem tarafından tanımlanmış hedef şablonları. Başlık ve açıklama içerir.
UserGoals — Kullanıcının hangi hedefleri aldığı. order alanıyla kullanıcının hedeflerini sıralayabilir.
Bu modül ilerleyen süreçte genişletilmek üzere minimal tutulmuş — şu an hedefler sadece kullanıcıya atanıp sıralanabiliyor, ilerleme takibi eklenmemiş.