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)
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)