Ejemplo n.º 1
0
 def get(self, request, *args, **kwargs):
     instance = self.get_object()
     question_views = QuestionViews()
     user, user_logged_in = user_is_authenticated(request)
     if user_logged_in:
         user_id = user.get("_id")
         user_ip = get_client_ip(request)
         question_id = instance.get("_id")
         qs = question_views.collection.find({"$and": [{"user_id": user_id}, {"question_id": question_id}]})
         if not qs.count():
             publisher = Publisher("stack")
             data = {"action": "Add question views", "user_id": str(user_id), "user_ip": user_ip,
                     "question_id": str(question_id)}
             publisher.publish(json.dumps(data))
     else:
         user_ip = get_client_ip(request)
         question_id = instance.get("_id")
         qs = question_views.collection.find({"$and": [{"user_ip": user_ip}, {"question_id": question_id}]})
         if not qs.count():
             publisher = Publisher("stack")
             data = {"action": "Add question views", "user_ip": user_ip,
                     "question_id": str(question_id)}
             publisher.publish(json.dumps(data))
     serializer = self.get_serializer(instance)
     return Response(serializer.data)
Ejemplo n.º 2
0
    def get(self, request, pk):
        user, user_logged_in = user_is_authenticated(request)
        if not user_logged_in:
            return Response({"message": "Not Allowed."}, status=400)

        answer = Answer()
        answer_obj = self.get_object(answer, pk)
        if not answer_obj:
            return Response({"message": "Answer object doesn't exists."}, status=400)

        vote = Vote()
        qs = vote.collection.find({"$and": [{"user_id": user.get("_id")}, {"data_id": answer_obj.get("_id")}]})
        if not qs.count():
            publisher = Publisher("stack")
            data = {"action": "Add answer votes", "user_id": str(user.get("_id")),
                    "data_id": pk, "answer_votes": answer_obj.get("votes"), "vote_type": -1}
            publisher.publish(json.dumps(data))
            return Response({"vote_added": True})
        else:
            vote_obj = qs.next()
            if vote_obj.get("vote_type") == -1:
                publisher = Publisher("stack")
                data = {"action": "undo answer votes",
                        "answer_id": pk, "answer_votes": answer_obj.get("votes"),
                        "vote_id": str(vote_obj.get("_id"))}

                publisher.publish(json.dumps(data))
                return Response({"vote_added": False})
            else:
                # update question vote type to -1 when vote type is 1
                publisher = Publisher("stack")
                data = {"action": "decrease answer votes", "vote_id": str(vote_obj.get("_id"))}
                publisher.publish(json.dumps(data))
                return Response({"vote_added": False})