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.
 
 
 
 
 
 

91 lines
3.1 KiB

from courses.models import Course, Lesson
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer
from progress.models import ProgressLesson
class TreeView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
def get(self, request, slug):
try:
course = Course.objects.get(slug=slug)
return Response(CourseTreeSerializer(course).data, self.status_code)
except Course.DoesNotExist:
return Response("Course doesn't exist", status=404)
class CourseListView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
def post(self, request):
"""
This API endpoint create/update course.
---
parameters:
- name: level
type: string
required: true
location: form
- name: direction
type: string
required: true
location: form
- name: statistic
type: string
required: true
location: form
...
"""
course = Course.objects.update_or_create_course(**request.JSON.dict())
return Response(CourseDetailSerializer(course).data, status=self.status_code)
def get(self, request):
"""
This API endpoint return list of courses.
---
"""
res = [CourseDetailSerializer(course).data for course in Course.objects.all()]
return Response(res, self.status_code)
class LessonDetail(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def get(request, token):
try:
lesson = Lesson.objects.get(token=token)
except Lesson.DoesNotExist:
return Response("Lesson doesn't exist", status=404)
if not lesson.free and not ProgressLesson.objects.filter(lesson_token=lesson.token).exists():
previous_lesson = lesson.topic.course.get_previous(lesson)
if not previous_lesson is None or not ProgressLesson.objects.filter(
lesson_token=previous_lesson.token, status=ProgressLesson.STATUSES.done).exists():
return Response("Lesson doesn't access", status=403)
# TODO: Доделать систему прав на курс
res = LessonSerializer(lesson).data
# progress = vertex.course.progress_set.filter(user=request.user)
# try:
# if progress.exists():
# next_vertex = vertex.get_next(progress[0].get_template())
# if next_vertex:
# res['next'] = MiniVertexSerializer(next_vertex).data
# res['is_in_progress'] = vertex in progress[0].get_objects_in_progress()
# else:
# res['next'] = MiniVertexSerializer(vertex.get_next(vertex.course.route)).data
# except Thread.DoesNotExist or Vertex.DoesNotExist:
# res['next'] = MiniVertexSerializer(vertex.get_next(vertex.course.route)).data
return Response(res, status=200)