def put(self, request, id):
        try:
            user_id = request.user.id
        except:
            return Response({"message": "Token is not valid."},
                            status=status.HTTP_401_UNAUTHORIZED)
        serializer = CommentSerializer(data=request.data)
        if serializer.is_valid():
            if serializer.validated_data['customer'].user_id == user_id:
                oldComment = Comment.objects.get(id=id)
                serializer = CommentSerializer(oldComment, data=request.data)
                if serializer.is_valid():
                    # update the rating of the product
                    product = serializer.validated_data['product']
                    rating = request.data['rating']
                    rateCounter = len(
                        Comment.objects.filter(product_id=product.id))
                    if rateCounter:
                        product.rating = (rating - oldComment.rating +
                                          product.rating *
                                          (rateCounter)) / rateCounter
                    else:
                        product.rating = rating
                    product.save()

                    serializer.save()
                    return Response(serializer.data)
            else:
                return Response({"message": "Token and user id didn't match"},
                                status=status.HTTP_401_UNAUTHORIZED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    def post(self, request):
        try:
            user_id = request.user.id
        except:
            return Response({"message": "Token is not valid."},
                            status=status.HTTP_401_UNAUTHORIZED)
        serializer = CommentSerializer(data=request.data)
        if serializer.is_valid():
            comment = Comment.objects.filter(
                product_id=serializer.validated_data['product'].id,
                customer_id=serializer.validated_data['customer'].user_id)
            if comment:
                return Response({"message": "A comment of you already exists"},
                                status=status.HTTP_400_BAD_REQUEST)
            if serializer.validated_data['customer'].user_id == user_id:
                # update the rating of the product
                product = serializer.validated_data['product']
                rating = request.data['rating']
                rateCounter = len(
                    Comment.objects.filter(product_id=product.id))
                if rateCounter:
                    product.rating = (rating + product.rating *
                                      rateCounter) / (rateCounter + 1)
                else:
                    product.rating = rating
                product.save()

                serializer.save()
                return Response(serializer.data,
                                status=status.HTTP_201_CREATED)
            else:
                return Response({"message": "Token and user id didn't match"},
                                status=status.HTTP_401_UNAUTHORIZED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #3
0
 def put(self, request, id):
     try:
         user_id = request.user.id
     except:
         return Response({"message": "Token is not valid."},
                         status=status.HTTP_401_UNAUTHORIZED)
     serializer = CommentSerializer(data=request.data)
     if serializer.is_valid():
         if serializer.validated_data['customer'].user_id == user_id:
             oldComment = Comment.objects.get(id=id)
             serializer = CommentSerializer(oldComment, data=request.data)
             if serializer.is_valid():
                 product = serializer.validated_data['product']
                 serializer.save()
                 avg_rating = calculate_rating(product.id)
                 product.rating = avg_rating
                 product.save()
                 return Response(serializer.data)
         else:
             return Response({"message": "Token and user id didn't match"},
                             status=status.HTTP_401_UNAUTHORIZED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)