You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

45 lines
1.4 KiB

from django.db.models import Value
from django.shortcuts import get_object_or_404
from rest_framework.generics import RetrieveAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from apps.course.access import user_has_course_access
from apps.quiz.models import Quiz
from apps.quiz.serializers.quiz import QuizSerializer
from apps.quiz.doc import *
from utils.exceptions import AppAPIException
class QuizDetailAPIView(RetrieveAPIView):
serializer_class = QuizSerializer
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
@swagger_auto_schema(
operation_description=doc_quiz_detail(),
tags=["Imam-Javad - Quiz"],
)
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
def get_object(self):
quiz = get_object_or_404(
Quiz.objects.filter(
id=self.kwargs['quiz_id'],
).annotate(
lesson__has_quiz=Value(True)
).select_related('lesson', 'course')
)
if quiz.course and not user_has_course_access(self.request.user, quiz.course):
raise AppAPIException(
{'message': 'You do not have access to this quiz.'},
status_code=403,
)
return quiz