def get(self, request, pk, format=None): group = Group.objects.filter(id=pk).first() # Group doesnt exist if group is None: return Response({ 'status': status.HTTP_404_NOT_FOUND, 'message': "Not found", }, status=status.HTTP_404_NOT_FOUND) group_user = GroupUser.objects.filter( group=group, user=request.user).first() # User is not in this group? if group_user is None: return Response({ 'status': status.HTTP_403_FORBIDDEN, 'message': "Can't access this", }, status=status.HTTP_403_FORBIDDEN) tasks = Task.objects.filter(group=group, is_completed=False) serializer = TaskSerializer(instance=tasks, many=True) return Response({ "status": status.HTTP_200_OK, 'tasks': serializer.data, }, status=status.HTTP_200_OK)
class TODOListSerializer(serializers.ModelSerializer): tasks = TaskSerializer(many=True, read_only=True) class Meta: model = TODOList fields = ('id','title','tasks')
def get(self, request, pk, format=None): user = User.objects.filter(id=pk).first() # User doesnt exist if user is None: return Response({ 'status': status.HTTP_404_NOT_FOUND, 'message': "Not found", }, status=status.HTTP_404_NOT_FOUND) # Not the same user # @TODO If the request is made by a parent, allow it # if request.user != user: # return Response({ # 'status': status.HTTP_404_NOT_FOUND, # 'message': "You can only access your own tasks", # }, status=status.HTTP_404_NOT_FOUND) tasks = Task.objects.filter(taskuser__user=user, is_completed=False) serializer = TaskSerializer(instance=tasks, many=True) return Response({ "status": status.HTTP_200_OK, 'tasks': serializer.data, }, status=status.HTTP_200_OK)
class TaskOnReviewSerializer(serializers.ModelSerializer): task = TaskSerializer() task_performer = TaskUserSerializer() class Meta: model = TaskReview exclude = ('id', 'user')
def patch(self, request, task_pk): task: Task = self.get_object(task_pk) serializer = TaskSerializer(task, data=request.data, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
def post(self, request): serializer = TaskSerializer(data=request.data, context={'request': self.request}) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=HTTP_201_CREATED) return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
def test_can_browse_all_tasks(self): ''' Ensure we can get list of tasks ''' response = self.client.get(reverse("tasks:task-list")) for task in self.tasks: self.assertIn( TaskSerializer(instance=task).data, response.data ) self.assertEqual(status.HTTP_200_OK, response.status_code) self.assertEqual(len(self.tasks), len(response.data))
def get(self, request, task_pk): task: Task = self.get_object(task_pk=task_pk) serializer = TaskSerializer(task) return Response(serializer.data)
def get(self, request): tasks: [Task] = Task.objects.get_close_tasks(user=request.user) serializer = TaskSerializer(tasks, many=True) return Response(serializer.data)
class ReviewersSerializer(serializers.ModelSerializer): tasks_on_review = TaskSerializer(many=True) class Meta: model = User exclude = ('tasks', )
def test_can_read_a_specific_task(self): response = self.client.get(reverse("tasks:task-detail", args=[self.task.id])) self.assertEqual(status.HTTP_200_OK, response.status_code) self.assertEqual(TaskSerializer(instance=self.task).data, response.data)