Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)