From 9a05040a54cc3706d8985fb2cc0476e40476c64c Mon Sep 17 00:00:00 2001 From: restukartiko Date: Wed, 25 Sep 2019 11:37:34 +0700 Subject: [PATCH 1/2] Apply rating changes in post review --- accounts/constants.py | 1 + accounts/views.py | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/accounts/constants.py b/accounts/constants.py index e69de29..a17d11b 100644 --- a/accounts/constants.py +++ b/accounts/constants.py @@ -0,0 +1 @@ +BASE_REVIEW = 2 \ No newline at end of file diff --git a/accounts/views.py b/accounts/views.py index d72b6e5..1312c51 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -18,6 +18,10 @@ from fluent.settings import CHAT_MAKING_QUEUE + +from accounts.constants import ( + BASE_REVIEW, +) from accounts.serializers import ( ConversationStarterSerializer, ProfileSerializer, @@ -32,7 +36,6 @@ TopicSerializer, TipsSerializer ) - from accounts.models import ( Profile, Queue, @@ -197,7 +200,6 @@ def start(self, request): 'talk_id': talk.id }) else: - print("HERE") queue = Queue.objects.create( user=user_profile.user.id, topic=topic, @@ -266,17 +268,21 @@ class ReviewViewSet(viewsets.GenericViewSet): # permission_classes = (permissions.IsAuthenticated,) queryset = Review.objects.all() serializer_class = ReviewSerializer + def create(self, request): talk_history = get_object_or_404(TalkHistory, id=request.data['talk_id']) user = get_object_or_404(User, id=request.data['user']) - if len(Review.objects.filter(user=user, talk_id=talk_history))>0: + + if len(Review.objects.filter(user=user, talk_id=talk_history)) > 0: return Response({ 'message': 'Review already exists' }) - if not (talk_history.user1 == user or talk_history == user): + + if not (talk_history.user1 == user or talk_history.user2 == user): return Response({ 'message': 'User not in talk' }) + if talk_history.is_valid: review = Review.objects.create( user=user, @@ -286,13 +292,28 @@ def create(self, request): note=request.data['note'], talk_id=talk_history ) + review.save() + self.applyRating(request) + return Response({ 'message':'OK' }) + return Response({ 'message': 'Talk is not valid', }) + + def applyRating(self, request): + user = get_object_or_404(User, id=request.data['user']) + user_profile = get_object_or_404(Profile, user=user) + + new_rating = user_profile.rating + new_rating = new_rating + (request.data['clarity'] - BASE_REVIEW)*5 + (request.data['pacing'] - BASE_REVIEW)*5 + (request.data['pronunciation'] - BASE_REVIEW)*5 + new_rating = new_rating - random.randint(-5, 5) # adjustment + + user_profile.rating = new_rating + user_profile.save() class TalkViewSet(viewsets.GenericViewSet): From 3b29d10fd97f31e063a910423768ac81568c469d Mon Sep 17 00:00:00 2001 From: restukartiko Date: Wed, 25 Sep 2019 11:42:26 +0700 Subject: [PATCH 2/2] Add atomic transaction in POST review api --- accounts/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/accounts/views.py b/accounts/views.py index 1312c51..c659392 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -269,6 +269,7 @@ class ReviewViewSet(viewsets.GenericViewSet): queryset = Review.objects.all() serializer_class = ReviewSerializer + @transaction.atomic def create(self, request): talk_history = get_object_or_404(TalkHistory, id=request.data['talk_id']) user = get_object_or_404(User, id=request.data['user'])