"""کمک‌تابعِ تست‌ها: جوابِ ثبت‌شده مثلِ اپ (اپ هر سوال را جدا با /answer ثبت می‌کند و بعد پایان را می‌زند).""" from .models import Choice, Question, UserAnswer def record_answers(user_id, *, lesson=None, node=None, correct=True): """ به همه‌ی سوال‌های یک درس یا یک جزیره جوابِ ثبت‌شده می‌دهد (مستقیم در DB، بی‌قلب و بی‌throttle). `correct=True` گزینه‌ی درست، `False` گزینه‌ی غلط را می‌زند؛ سوالی که آن گزینه را ندارد گزینه‌اش ساخته می‌شود. سوالی که پیش‌تر جواب داده شده دست نمی‌خورد. تعدادِ سوال‌های جوابِ‌داده‌شده را برمی‌گرداند. """ questions = Question.objects.all() if lesson is not None: questions = questions.filter(lesson=lesson) if node is not None: questions = questions.filter(lesson__node=node) count = 0 for question in questions.prefetch_related('choices'): choice = next((c for c in question.choices.all() if c.is_correct == correct), None) if choice is None: choice = Choice.objects.create( question=question, value='درست' if correct else 'غلط', is_correct=correct) UserAnswer.objects.get_or_create( user_id=user_id, question=question, defaults={'choice': choice, 'correct': correct, 'xp_earned': 10 if correct else 0}, ) count += 1 return count