|
|
|
@ -76,7 +76,7 @@ class AdminQuizViewSet(ModelViewSet): |
|
|
|
quiz = self.get_object() |
|
|
|
|
|
|
|
# 1. Fetch participants |
|
|
|
participants_qs = QuizParticipant.objects.filter(quiz=quiz).select_related('user') |
|
|
|
participants_qs = QuizParticipant.objects.filter(quiz=quiz).select_related('user').prefetch_related('answers') |
|
|
|
participants_serializer = AdminQuizParticipantSerializer(participants_qs, many=True) |
|
|
|
|
|
|
|
# 2. Fetch absentees |
|
|
|
@ -128,6 +128,34 @@ class AdminQuestionViewSet(ModelViewSet): |
|
|
|
|
|
|
|
return queryset.order_by('priority', 'id') |
|
|
|
|
|
|
|
@action(detail=False, methods=['post']) |
|
|
|
def reorder(self, request): |
|
|
|
""" |
|
|
|
Reorders questions in bulk. |
|
|
|
Accepts a list of question IDs. |
|
|
|
Format: |
|
|
|
{ |
|
|
|
"question_ids": [10, 12, 11, 15] |
|
|
|
} |
|
|
|
""" |
|
|
|
question_ids = request.data.get('question_ids', []) |
|
|
|
if not question_ids: |
|
|
|
return Response({'error': 'question_ids list is required'}, status=400) |
|
|
|
|
|
|
|
# Update priority for each question based on its position in the list |
|
|
|
from django.db import transaction |
|
|
|
questions = Question.objects.filter(id__in=question_ids) |
|
|
|
question_map = {q.id: q for q in questions} |
|
|
|
|
|
|
|
with transaction.atomic(): |
|
|
|
for idx, q_id in enumerate(question_ids): |
|
|
|
if q_id in question_map: |
|
|
|
question = question_map[q_id] |
|
|
|
question.priority = idx + 1 |
|
|
|
question.save(update_fields=['priority']) |
|
|
|
|
|
|
|
return Response({'status': 'success'}) |
|
|
|
|
|
|
|
|
|
|
|
class AdminCourseListView(ListAPIView): |
|
|
|
""" |
|
|
|
|