def post(oid, user, achievement_id, **_kwargs): """ Return an user key information based on his name """ achievement = AchievementRepository.get(achievement_id) if achievement: try: user = UserRepository.obtain(user, achievement) except sqlalchemy.orm.exc.FlushError: return render_error( 'User has already obtained this achievement') return render_resource(user)
def post(answer_id, trivia_id, question_id, user, **_kwargs): """ Return an user key information based on his name """ answer = SubmittedAnswer( answer_id=answer_id, trivia_id=trivia_id, user_id=user.oid, question_id=question_id ).save() trivia = Trivia.query.filter_by(id=trivia_id).one() achievement = AchievementRepository.get(trivia.achievement_id) if achievement: if len(trivia.submitted_answers) == len(achievement.questions): trivia.completed = True trivia.save() achieved = True for answer in trivia.submitted_answers: if not answer.answer.is_right: achieved = False break if achieved: user.achievements_rate = user.achievements_rate + 50 user.save() try: UserRepository.obtain(user, achievement) except sqlalchemy.orm.exc.FlushError: pass elif len(trivia.submitted_answers) == len(trivia.questions) * 2: trivia.completed = True trivia.save() players_score = {trivia.user_id: 0, trivia.second_player_id: 0} answers_checked = [] for answer in trivia.submitted_answers: if answer.id in answers_checked: continue for aanswer in trivia.submitted_answers: if aanswer.id in answers_checked: continue if aanswer.id == answer.id: continue if aanswer.question_id != answer.question_id: continue if aanswer.answer.is_right and answer.answer.is_right: if aanswer.created_at < answer.created_at: players_score[aanswer.user_id] += 1 else: players_score[answer.user_id] += 1 elif aanswer.answer.is_right: players_score[aanswer.user_id] += 1 elif answer.answer.is_right: players_score[answer.user_id] += 1 answers_checked.append(answer.id) answers_checked.append(aanswer.id) first_player_id, first_player_score = players_score.popitem() second_player_id, second_player_score = players_score.popitem() if trivia.user_id != first_player_id: first_player_id, first_player_score, second_player_id, second_player_score = ( second_player_id, second_player_score, first_player_id, first_player_score ) if first_player_score == second_player_score: user = UserRepository.get(first_player_id) user.trivia_rate = user.trivia_rate + 20 user.save() user = UserRepository.get(second_player_id) user.trivia_rate = user.trivia_rate + 20 user.save() trivia.first_player_score = 20 trivia.second_player_score = 20 trivia.save() elif first_player_score > second_player_score: user = UserRepository.get(first_player_id) user.trivia_rate = user.trivia_rate + 45 user.save() trivia.first_player_score = 45 trivia.second_player_score = 0 trivia.save() else: user = UserRepository.get(second_player_id) user.trivia_rate = user.trivia_rate + 45 user.save() trivia.first_player_score = 0 trivia.second_player_score = 45 trivia.save() return render_resource(answer)