|
9 | 9 |
|
10 | 10 |
|
11 | 11 | class InviteList(generics.ListCreateAPIView): |
12 | | - queryset = Invite.objects.get_invite_for_list_view() |
| 12 | + queryset = Invite.objects.get_invite_for_list_view().filter(is_accepted__isnull=True) |
13 | 13 | serializer_class = InviteDetailSerializer |
14 | 14 | permission_classes = [permissions.IsAuthenticatedOrReadOnly] |
15 | 15 | filter_backends = (filters.DjangoFilterBackend,) |
@@ -47,13 +47,30 @@ def post(self, request, *args, **kwargs): |
47 | 47 | invite = self.get_object() # type: Invite |
48 | 48 | if invite.user != request.user: |
49 | 49 | return Response(status=status.HTTP_403_FORBIDDEN) |
| 50 | + if invite.is_accepted is True: |
| 51 | + return Response( |
| 52 | + {"detail": "Invite has already been accepted."}, |
| 53 | + status=status.HTTP_409_CONFLICT, |
| 54 | + ) |
| 55 | + if invite.is_accepted is False: |
| 56 | + return Response( |
| 57 | + {"detail": "Invite has already been declined."}, |
| 58 | + status=status.HTTP_409_CONFLICT, |
| 59 | + ) |
50 | 60 | # add user to project collaborators |
51 | | - Collaborator.objects.create( |
| 61 | + collaborator, created = Collaborator.objects.get_or_create( |
52 | 62 | user=invite.user, |
53 | 63 | project=invite.project, |
54 | | - role=invite.role, |
55 | | - specialization=invite.specialization, |
| 64 | + defaults={ |
| 65 | + "role": invite.role, |
| 66 | + "specialization": invite.specialization, |
| 67 | + }, |
56 | 68 | ) |
| 69 | + if not created: |
| 70 | + return Response( |
| 71 | + {"detail": "User is already a collaborator of this project."}, |
| 72 | + status=status.HTTP_409_CONFLICT, |
| 73 | + ) |
57 | 74 | invite.is_accepted = True |
58 | 75 | invite.save() |
59 | 76 | return Response(status=status.HTTP_200_OK) |
|
0 commit comments