summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/serializers.py42
-rw-r--r--api/urls.py3
-rw-r--r--api/views.py45
3 files changed, 88 insertions, 2 deletions
diff --git a/api/serializers.py b/api/serializers.py
index d34f269..df66730 100644
--- a/api/serializers.py
+++ b/api/serializers.py
@@ -1,5 +1,8 @@
from rest_framework import serializers
-from yaksh.models import Question, Quiz, QuestionPaper, AnswerPaper
+from yaksh.models import (
+ Question, Quiz, QuestionPaper, AnswerPaper, Course,
+ LearningModule, LearningUnit, Lesson
+)
class QuestionSerializer(serializers.ModelSerializer):
@@ -21,6 +24,43 @@ class QuestionPaperSerializer(serializers.ModelSerializer):
class AnswerPaperSerializer(serializers.ModelSerializer):
+
+ questions = QuestionSerializer(many=True)
+
class Meta:
model = AnswerPaper
fields = '__all__'
+
+
+class LessonSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Lesson
+ fields = '__all__'
+
+
+class LearningUnitSerializer(serializers.ModelSerializer):
+
+ quiz = QuizSerializer()
+ lesson = LessonSerializer()
+
+ class Meta:
+ model = LearningUnit
+ fields = '__all__'
+
+
+class LearningModuleSerializer(serializers.ModelSerializer):
+
+ learning_unit = LearningUnitSerializer(many=True)
+
+ class Meta:
+ model = LearningModule
+ fields = '__all__'
+
+
+class CourseSerializer(serializers.ModelSerializer):
+
+ learning_module = LearningModuleSerializer(many=True)
+
+ class Meta:
+ model = Course
+ fields = '__all__'
diff --git a/api/urls.py b/api/urls.py
index 5dfd8c7..22a9b54 100644
--- a/api/urls.py
+++ b/api/urls.py
@@ -7,6 +7,9 @@ urlpatterns = [
url(r'questions/$', views.QuestionList.as_view(), name='questions'),
url(r'questions/(?P<pk>[0-9]+)/$', views.QuestionDetail.as_view(),
name='question'),
+ url(r'get_courses/$', views.CourseList.as_view(), name='get_courses'),
+ url(r'start_quiz/(?P<course_id>[0-9]+)/(?P<quiz_id>[0-9]+)/$', views.StartQuiz.as_view(),
+ name='start_quiz'),
url(r'quizzes/$', views.QuizList.as_view(), name='quizzes'),
url(r'quizzes/(?P<pk>[0-9]+)/$', views.QuizDetail.as_view(), name='quiz'),
url(r'questionpapers/$', views.QuestionPaperList.as_view(),
diff --git a/api/views.py b/api/views.py
index ff21828..b81e895 100644
--- a/api/views.py
+++ b/api/views.py
@@ -3,7 +3,7 @@ from yaksh.models import (
)
from api.serializers import (
QuestionSerializer, QuizSerializer, QuestionPaperSerializer,
- AnswerPaperSerializer
+ AnswerPaperSerializer, CourseSerializer
)
from rest_framework.views import APIView
from rest_framework.response import Response
@@ -31,6 +31,49 @@ class QuestionList(APIView):
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+class CourseList(APIView):
+ """ List all courses """
+
+ def get(self, request, format=None):
+ courses = Course.objects.filter(students=request.user)
+ serializer = CourseSerializer(courses, many=True)
+ return Response(serializer.data)
+
+
+class StartQuiz(APIView):
+ """ Retrieve Answerpaper. If does not exists then create one """
+
+ def get_quiz(self, pk, user):
+ try:
+ return Quiz.objects.get(pk=pk)
+ except Quiz.DoesNotExist:
+ raise Http404
+
+ def get(self, request, course_id, quiz_id, format=None):
+ user = request.user
+ quiz = self.get_quiz(quiz_id, user)
+ questionpaper = quiz.questionpaper_set.first()
+
+ last_attempt = AnswerPaper.objects.get_user_last_attempt(
+ questionpaper, user, course_id)
+ if last_attempt and last_attempt.is_attempt_inprogress():
+ serializer = AnswerPaperSerializer(last_attempt)
+ return Response(serializer.data)
+
+ can_attempt, msg = questionpaper.can_attempt_now(user, course_id)
+ if not can_attempt:
+ return Response({'message': msg})
+ if not last_attempt:
+ attempt_number = 1
+ else:
+ attempt_number = last_attempt.attempt_number + 1
+ ip = request.META['REMOTE_ADDR']
+ answerpaper = questionpaper.make_answerpaper(user, ip, attempt_number,
+ course_id)
+ serializer = AnswerPaperSerializer(answerpaper)
+ return Response(serializer.data, status=status.HTTP_201_CREATED)
+
+
class QuestionDetail(APIView):
""" Retrieve, update or delete a question """