from rest_framework.views import APIView from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from django.db.models import Q from lms.global_decorators import transaction_decorator from journals.models import Thread from journals.serilizers import ThreadUserSerializer, ThreadAdminSerializer class ThreadAdminListView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): return Response( [ThreadAdminSerializer(thread).data for thread in Thread.objects.filter(is_staff=True)], self.status_code, ) class ThreadDetailView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def post(self, request, key): try: thread = Thread.objects.get(key=key) thread.text = request.JSON.get('text', thread.text) thread.key = request.JSON.get('key', thread.key) thread.x = request.JSON.get('x', thread.x) thread.y = request.JSON.get('y', thread.y) thread.save() return Response(ThreadAdminSerializer(thread).data, self.status_code,) except Thread.DoesNotExist: return Response("Thread doesn't exist.", self.status_code,) def get(self, request, key): try: return Response(ThreadUserSerializer(Thread.objects.get(key=key)).data, self.status_code) except Thread.DoesNotExist: return Response("Thread not found", status=404) class TeacherThreadListView(APIView): renderer_classes = (JSONRenderer,) @transaction_decorator def get(self, request): if not request.user.is_authenticated and not 'teachers' in request.user.groups: return Response("Permission denied", status=403) threads = Thread.objects.filter(Q(subscribers=request.user) | Q(groups__user=request.user)) return Response([ThreadUserSerializer(i).data for i in threads])