async def create_user(payload): user = PostUser.from_dict(payload) user_id = await insert_model_to_db(user) created_user = await select_model_from_db(GetUser, user_id) return json(body={ "message": "user registered successfuly", "user": created_user.to_dict() }, status=201)
async def logout_user(payload): user = PostUser.from_dict(payload) result = await DB.get_pool().fetchrow( """ SELECT 1 FROM users WHERE nick=$1 AND password=$2 """, user.nick, user.password) if result: return json(body={"message": "successful operation"}, status=200) return json(body={"message": "Invalid username/password supplied"}, status=400)
async def insert_quiz_taken(payload, id: int): user = PostUser.from_dict(payload) result = await DB.get_pool().fetchrow( """ SELECT 1 FROM users WHERE nick=$1 AND password=$2 """, user.nick, user.password) if not result: return json(body={"message": "Invalid username/password supplied"}, status=400) await insert_user_quiz_taken(user, id) return json(body={"message": "quiz taken sucessfuly"}, status=201)
async def get_all_answers(payload, id): user = PostUser.from_dict(payload) result = await DB.get_pool().fetchrow( """ SELECT user_id, is_admin FROM users WHERE nick=$1 AND password=$2 """, user.nick, user.password) if not result: # created_user = await select_model_from_db(GetUser, result["user_id"]) return json(body={"message": "Invalid username/password supplied"}, status=400) result = await DB.get_pool().fetchrow( """ SELECT quiz_id FROM quiz WHERE quiz_id=$1 """, id) if not result: # created_user = await select_model_from_db(GetUser, result["user_id"]) return json(body={"message": "Invalid quiz_id supplied"}, status=404) user_ids = await DB.get_pool().fetch( """ SELECT user_id from user_quiz_taken WHERE quiz_id=$1""", id) user_ids = [row["user_id"] for row in user_ids] user_ids = random.sample(user_ids, len(user_ids)) answers = await DB.get_pool().fetch( """ SELECT a.value, a.question_id, qa.answer, qu.question FROM quiz_user_answers a left outer join quiz_answer qa on a.answer_id=qa.answer_id JOIN quiz_question qu on a.question_id=qu.question_id WHERE quiz_id=$1""", id) questions = {} for answer in answers: question_id = answer["question_id"] if question_id not in questions: questions[question_id] = { "question": answer["question"], "answers": [answer["answer"] or answer["value"]] } else: questions[question_id]["answers"].append(answer["answer"] or answer["value"]) for key in questions.keys(): questions[key]["answers"] = random.sample( questions[key]["answers"], len(questions[key]["answers"])) return json(body={ "message": "success", "user_ids": user_ids, "questions": questions }, status=200)
async def login_user(payload): user = PostUser.from_dict(payload) result = await DB.get_pool().fetchrow( """ SELECT user_id, is_admin FROM users WHERE nick=$1 AND password=$2 """, user.nick, user.password) if result: # created_user = await select_model_from_db(GetUser, result["user_id"]) return json(body={ "message": "successful operation", "user": { "nick": user.nick, "user_id": result["user_id"], "is_admin": result["is_admin"] } }, status=200) return json(body={"message": "Invalid username/password supplied"}, status=400)