예제 #1
0
def get_achievement_level(request):
    """get all information about an achievement for a specific level"""
    try:
        achievement_id = int(request.matchdict.get("achievement_id", None))
        level = int(request.matchdict.get("level", None))
    except:
        raise APIError(400, "invalid_input", "invalid input")

    achievement = Achievement.get_achievement(achievement_id)

    if not achievement:
        raise APIError(404, "achievement_not_found", "achievement not found")

    level_output = Achievement.basic_output(achievement, True,
                                            level).get("levels").get(
                                                str(level), {
                                                    "properties": {},
                                                    "rewards": {}
                                                })
    if "goals" in level_output:
        del level_output["goals"]
    if "level" in level_output:
        del level_output["level"]

    return level_output
예제 #2
0
def badges(request):
    params = request.GET
    achievements = Achievement.get_all_achievements()
    if request.method == 'POST':
        if 'achievement_id' in request.POST:
            achievement_id = request.POST['achievement_id']
            achievement = Achievement.get_achievement(achievement_id)
            rewards = AchievementReward.get_rewards(achievement_id, 6)
            badges = AchievementReward.get_rewards(achievement_id, 1)
            nb_levels = (int)(achievement["maxlevel"] / 5)
            if not badges:
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge1.PNG", 1)
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge2.PNG", nb_levels)
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge3.PNG", nb_levels * 2)
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge4.PNG", nb_levels * 3)
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge5.PNG", nb_levels * 4)
                AchievementReward.create_achievement_rewards_badges(
                    achievement_id, "badge6.PNG", nb_levels * 5)
            achievement_id = request.POST['achievement_id']
            return {
                'selected_achievement': achievement_id,
                'achievements': achievements,
                'params': params,
                'levels': nb_levels,
                'rewards': rewards
            }
        else:
            reward_name = request.POST['reward_name']
            reward_level = request.POST['reward_level']
            selected_achievement = request.POST['selected_achievement']
            AchievementReward.create_achievement_rewards(
                selected_achievement, reward_name, reward_level)
            return {'achievements': achievements, 'params': params}
    else:
        return {'achievements': achievements, 'params': params}
예제 #3
0
def leaderboard(request):
    params = request.GET
    achievement_id = params["id"]
    sorted_by = {"type": "Global"}
    achievement = Achievement.get_achievement(achievement_id)
    if request.method == 'POST':
        if ('sorted_value' in request.POST):
            sorted_by["type"] = params["type"]
            sorted_by.update({'value': request.POST['sorted_value']})
            result = Achievement.get_leaderbord_by_relevance(
                achievement_id, sorted_by)
            header_table = []
            for key, value in result[0]["user"][
                    "additional_public_data"].items():
                header_table.append(key)
            return {
                'header_table': header_table,
                'result': result,
                'winner': result[0],
                'params': params,
                'sorted_by': sorted_by["type"],
                'achievement': achievement,
                'sorted_value': request.POST['sorted_value']
            }
        elif ('sorted_by' in request.POST):
            sorted_by["type"] = request.POST['sorted_by']
            params.update({'type': request.POST['sorted_by']})
            if sorted_by["type"] == 'Global':
                result = Achievement.get_leaderbord_by_achievement(
                    achievement_id)
                header_table = []
                for key, value in result[0]["user"][
                        "additional_public_data"].items():
                    header_table.append(key)
                return {
                    'header_table': header_table,
                    'result': result,
                    'winner': result[0],
                    'params': params,
                    'sorted_by': sorted_by["type"],
                    'achievement': achievement
                }
            else:
                sort_res = User.sort(sorted_by["type"])
                myarray = []
                myarray = np.asarray(sort_res)
                result = Achievement.get_leaderbord_by_achievement(
                    achievement_id)
                header_table = []
                for key, value in result[0]["user"][
                        "additional_public_data"].items():
                    header_table.append(key)
                return {
                    'header_table': header_table,
                    'result': result,
                    'winner': result[0],
                    'exist': sort_res,
                    'sort_res': myarray,
                    'params': params,
                    'sorted_by': sorted_by["type"],
                    'achievement': achievement
                }
    else:
        result = Achievement.get_leaderbord_by_achievement(achievement_id)
        header_table = []
        for key, value in result[0]["user"]["additional_public_data"].items():
            header_table.append(key)
        return {
            'header_table': header_table,
            'result': result,
            'winner': result[0],
            'params': params,
            'sorted_by': sorted_by["type"],
            'achievement': achievement
        }