def post(user, achievement_id, **_kwargs): """ Return an user key information based on his name """ if achievement_id: trivia = Trivia.query.filter( and_(Trivia.completed == False, and_( Trivia.user_id == user.oid, Trivia.achievement_id == achievement_id )) ).first() else: trivia = Trivia.query.filter( and_( and_(Trivia.completed == False, or_( Trivia.user_id == user.oid, Trivia.second_player_id == user.oid )), Trivia.achievement_id == None ) ).first() if trivia: return render_resource(trivia) try: if achievement_id: trivia = Trivia(user_id=user.oid, achievement_id=achievement_id) trivia.questions = AchievementRepository.get(achievement_id).questions else: trivia = Trivia.query.filter( and_(and_( Trivia.second_player_id == None, Trivia.achievement_id == None ), or_( Trivia.second_player_id != user.oid, Trivia.user_id != user.oid )) ).first() if not trivia: trivia = Trivia(user_id=user.oid) else: trivia.second_player_id = user.oid for question in Question.query.from_statement( text("select * from question order by random() limit 7") ).all(): trivia.questions.append(question) db.session.add(trivia) db.session.commit() except Exception as exc: db.session.rollback() raise exc return render_error('Error occurred') return render_resource(trivia)
def get(trivia_id, user, **_kwargs): """ Return an user key information based on his name """ trivia = Trivia.query.filter_by(id=trivia_id).one_or_none() if trivia: if trivia.user_id != user.oid and trivia.second_player_id != user.oid: return render_error( 'You are not authorized to access this page', 401) return render_resource(trivia)
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)
def get(achievement_id, **_kwargs): """ Return an user key information based on his name """ return render_resource( AchievementRepository.get(achievement_id).questions)
def post(name, short_description, long_description, difficulty, image_src, bg_image_src, **_kwargs): return render_resource( AchievementRepository.create(name, short_description, long_description, difficulty, image_src, bg_image_src))
def get(**_kwargs): """ Return an user key information based on his name """ return render_resource(AchievementRepository.all())
def get(oid, **_kwargs): """ Return an user key information based on his name """ return render_resource(UserRepository.get(oid))
def put(achievement_id, name, short_description, long_description, difficulty, image_src, bg_image_src, **_kwargs): return render_resource( AchievementRepository.update(achievement_id, name, short_description, long_description, difficulty, image_src, bg_image_src))
def get(oid, user, **_kwargs): return render_resource(user.achievements)
def get(user, **_kwargs): """ Return an user key information based on his name """ return render_resource(user)