elemes/services
a2nr c911908316 feat(progress): sinkronisasi evaluasi & recompute progress saat publish
- Publish konten langsung menyinkronkan lesson registry dan merekomputasi
  composite/state siswa bila jenis evaluasi (latihan/kuis) berubah, tanpa
  menunggu restart server.
- TTL cache (`LESSON_LIST_CACHE_TTL`, default 30 detik) untuk daftar lesson
  agar worker gunicorn lain ikut segar tanpa invalidasi lintas proses.
- Endpoint POST /content/sync-registry (teacher-only) + tombol Sinkronisasi di
  /teacher/progress untuk menangkap perubahan konten di luar webapp.
- Notifikasi editor saat progress siswa dihitung ulang pasca-publish.
- `recompute_lesson_progress()`: skor historis tetap disimpan; state legacy
  completed/scored tidak disentuh.
- Test unit (TTL cache + signature evaluasi) dan integrasi (publish recompute,
  sync registry, endpoint auth) + dokumentasi.

Tanpa perubahan schema DB.
2026-10-27 00:50:02 +07:00
..
scripts fix(markdown): sanitasi DOMPurify, perbaikan parser flashcard & kompatibilitas SSR Node 20 2026-08-28 05:24:44 +07:00
storage feat(quiz): taksonomi key quiz per jenis + MCQ berbobot (partial credit) 2026-10-25 20:16:56 +07:00
tests feat(progress): sinkronisasi evaluasi & recompute progress saat publish 2026-10-27 00:50:02 +07:00
__init__.py
…
database.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
docs_service.py fix(docs/api): hilangkan sync berulang di api_reference + UI API Reference di /docs 2026-08-17 16:37:30 +07:00
evaluation.py feat: unified lesson progress — composite score & /api/lesson-progress 2026-08-29 00:22:10 +07:00
image_cache.py feat(assets): optimasi serving gambar (WebP on-the-fly + cache disk) 2026-10-25 19:19:07 +07:00
lesson_registry.py feat(progress): sinkronisasi evaluasi & recompute progress saat publish 2026-10-27 00:50:02 +07:00
lesson_service.py feat(progress): sinkronisasi evaluasi & recompute progress saat publish 2026-10-27 00:50:02 +07:00
models.py feat(quiz): izinkan guru melanjutkan attempt terminated dari jawaban tersimpan 2026-10-20 19:24:40 +07:00
progress_status.py feat(progress): composite scoring, roundtrip CSV grammar, and report export 2026-08-30 04:12:23 +07:00
repositories.py feat(progress): sinkronisasi evaluasi & recompute progress saat publish 2026-10-27 00:50:02 +07:00
student_roundtrip.py feat(student-management): sync imported progress with composite model and add inline expected format to CSV headers 2026-09-08 19:01:33 +07:00
teacher_auth.py feat(content-editor): konfirmasi ganda file navigasi kritis & hapus narrow sidebar 2026-08-23 08:18:02 +07:00
teacher_bootstrap.py feat(teacher): manajemen akun guru canonical + first-run otomatis; cabut backend CSV (PG only) 2026-08-09 11:21:08 +07:00
token_hashing.py feat(storage): migrasi penyimpanan CSV ke PostgreSQL (SQLAlchemy + Alembic) 2026-08-08 04:57:08 +00:00
token_service.py feat(quiz): izinkan guru melanjutkan attempt terminated dari jawaban tersimpan 2026-10-20 19:24:40 +07:00