from typing import Dict, Tuple from sqlalchemy.orm import Session from app.models import Module, QuizQuestion, QuizChoice def grade_quiz(db: Session, module: Module, answers: Dict[int, int]) -> Tuple[float, int, int]: questions = ( db.query(QuizQuestion) .filter(QuizQuestion.module_id == module.id) .all() ) if not questions: return 0.0, 0, 0 correct = 0 total = len(questions) for q in questions: choice_id = answers.get(q.id) if choice_id is None: continue choice = db.get(QuizChoice, choice_id) if choice and choice.question_id == q.id and choice.is_correct: correct += 1 score = (correct / total) * 100 return score, correct, total