def get(self, request, user_id):
     """
     Get user details.
     :param request: request
     :param user_id: user_id
     :return: json response
     """
     data = redis_hash.get_all(user_id)
     data['user_id'] = user_id
     data['points'] = int(redis_leaderboard.get_score(user_id))
     data['rank'] = redis_leaderboard.get_rank(user_id)
     return Response(data)
Beispiel #2
0
 def stream_response_generator(self, data):
     """
     Generates stream response.
     :return: parts of the response
     """
     yield '['
     for i, element in enumerate(data):
         if i != 0:
             yield ','
         user_id = element[0]
         json_obj = get_all(user_id)
         json_obj['rank'] = i + 1
         json_obj['points'] = int(element[1])
         yield json_obj
     yield ']'
Beispiel #3
0
def get_response_data(data, start=0):
    """
    Returns response data from fiven sorted set data.
    :param data: data from sorted set
    :param start: start index
    :return: response data
    """
    response_data = []
    for i, element in enumerate(data):
        user_id = element[0]
        json_obj = redis_hash.get_all(user_id)
        json_obj['rank'] = start + i + 1
        json_obj['points'] = int(element[1])
        response_data.append(json_obj)
    return response_data
Beispiel #4
0
 def get(self, request, iso_code):
     """
     Get response. Get all data from country leaderboard,
     then get user info from hash and return.
     :param request: request
     :param iso_code: country code
     :return: response as json
     """
     data = redis_leaderboard.get_country_leaderboard(iso_code)
     response_data = []
     for element in data:
         user_id = element[0]
         json_obj = redis_hash.get_all(user_id)
         json_obj['rank'] = redis_leaderboard.get_rank(user_id)
         json_obj['points'] = int(element[1])
         response_data.append(json_obj)
     return Response(response_data)
 def post(self, request, format=None):
     """
     Creates a userScore objects, add it to redis leaderboards.
     :param request: request
     :param format: format
     :return: json response
     :return: json response
     """
     serializer = UserScoreSerializer(data=request.data)
     if serializer.is_valid():
         serializer.save()
         user_id = str(serializer.data["user_id"])
         user_info = redis_hash.get_all(user_id)
         redis_leaderboard.increase_user_score(
             user_id, serializer.data["score_worth"])
         redis_leaderboard.increase_user_score_country(
             user_info['country'], user_id, serializer.data["score_worth"])
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)