-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathviews.py
More file actions
97 lines (79 loc) · 3.5 KB
/
views.py
File metadata and controls
97 lines (79 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from rest_framework import generics
from rest_framework import permissions
from rest_framework import status
from rest_framework.response import Response
from .serializers import *
from .models import Todo
from .access import AllUsers,Creator
"""
TODO:
Create the appropriate View classes for implementing
Todo GET (List and Detail), PUT, PATCH and DELETE.
"""
class TodoCreateView(generics.GenericAPIView):
"""
TODO:
Currently, the /todo/create/ endpoint returns only 200 status code,
after successful Todo creation.
Modify the below code (if required), so that this endpoint would
also return the serialized Todo data (id etc.), alongwith 200 status code.
"""
permission_classes = (permissions.IsAuthenticated, )
serializer_class = TodoCreateSerializer
def post(self, request):
"""
Creates a Todo entry for the logged in user.
"""
serializer = self.get_serializer(data=request.data)
if serializer.is_valid(raise_exception=True):
item = serializer.save()
return Response({
'id':item.id,
'title':item.title,
}, status=status.HTTP_201_OK)
else:
return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
class TodoAllView(generics.ListAPIView):
permission_classes = (permissions.IsAuthenticated, AllUsers)
serializer_class = TodoSerializer
def list(self, request, *args, **kwargs):
queryset1 = Todo.objects.filter(creator=request.user)
queryset2 = Todo.objects.filter(collaborators=request.user)
queryset = (queryset1 | queryset2).distinct()
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
class TodoDetailView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = (permissions.IsAuthenticated, AllUsers)
serializer_class = TodoSerializer
def get_queryset(self):
todocollab = Todo.objects.filter(Collaborators = self.request.user, id = self.kwargs['id'])
if todocollab:
todocollab[0].iscreator = False
todocollab[0].iscollab = True
todocollab[0].save()
todocreator = Todo.objects.filter(creator = self.request.user, id = self.kwargs['id'])
if todocreator:
todocreator[0].iscreator = True
todocreator[0].iscollab = False
todocreator[0].save()
return todocreator | todocollab
class AddCollab(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated, Creator)
serializer_class = CollabSerializer
def post(self, request):
serializer = self.get_serializer(data = request.data)
if serializer.is_valid():
serializer.add_collaborators(self.kwargs['id'], request.user)
return Response({'message': 'Success'}, status = status.HTTP_201_CREATED)
else:
return Response({'message': 'Failure'}, status = status.HTTP_404_NOT_FOUND)
class RemoveCollab(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated, Creator)
serializer_class = CollabSerializer
def delete(self, request):
serializer = self.get_serializer(data = request.data)
if serializer.is_valid():
serializer.remove_collaborators(self.kwargs['id'])
return Response({'message': 'Success'}, status = status.HTTP_200_OK)
else:
return Response({'message': 'Failure'}, status = status.HTTP_404_NOT_FOUND)