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, VertexSerializer 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): course = Course.objects.update_or_create_course(**request.JSON.dict()) return Response(CourseDetailSerializer(course).data, status=self.status_code) def get(self, request): res = [CourseDetailSerializer(course).data for course in Course.objects.all()] return Response(res, self.status_code) class VertexDetail(APIView): renderer_classes = (JSONRenderer,) @staticmethod def get(request, token): try: vertex = Lesson.objects.get(token=token) except Lesson.DoesNotExist: return Response("Vertex doesn't exist", status=404) # if not vertex.check_vertex(request.user): # return Response("permission denied", status=403) # TODO: Доделать систему прав на курс res = VertexSerializer(vertex).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)