elemes/services/token_service.py

49 lines
1.5 KiB
Python
Raw Permalink Normal View History

2026-03-25 09:39:51 +07:00
"""
Token & progress facade kontrak publik yang dipakai routes.
Mendelegasikan ke satu-satunya storage backend aktif: PostgreSQL
(services.storage.postgres_backend). Backend CSV sudah dicabut setelah
cutover penuh routes TIDAK boleh tahu detail backend, cukup import sini.
2026-03-25 09:39:51 +07:00
"""
from services.storage import get_backend_module
def _backend():
return get_backend_module()
def validate_token(token):
"""Valid token → {'student_name', 'is_teacher'} | None."""
return _backend().validate_token(token)
def is_teacher_token(token):
return _backend().is_teacher_token(token)
2026-03-25 09:39:51 +07:00
def get_student_progress(token):
"""Dict {lesson_slug: status} | None."""
return _backend().get_student_progress(token)
2026-03-25 09:39:51 +07:00
def update_student_progress(token, lesson_name, status="completed"):
return _backend().update_student_progress(token, lesson_name, status)
2026-03-25 09:39:51 +07:00
def reset_student_progress(student_id, lesson_name):
"""Reset progress siswa by student_id (id anonim dari report — bukan token)."""
return _backend().reset_progress(student_id, lesson_name)
def get_all_students_progress(all_lessons_func):
"""(students, ordered_lessons) — tanpa token mentah di student dict."""
return _backend().get_all_students_progress(all_lessons_func)
2026-03-25 09:39:51 +07:00
def calculate_student_completion(student_data, all_lessons):
"""Helper murni bersama (parity kedua backend)."""
from services.storage.completion import calculate_student_completion as _calc
2026-03-25 09:39:51 +07:00
return _calc(student_data, all_lessons)