You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.2 KiB
53 lines
2.2 KiB
6 months ago
|
from flask import Blueprint
|
||
|
from flask import Blueprint, request, jsonify, current_app, g
|
||
|
from db.model import User, Category, Quiz, Course, Enrollment, QuizAttempt
|
||
|
from db.model import db
|
||
|
import uuid
|
||
|
from sqlalchemy import select, and_
|
||
|
|
||
|
quiz = Blueprint('quiz', __name__)
|
||
|
|
||
|
|
||
|
@quiz.route('/create', methods=['POST'])
|
||
|
def create_quiz():
|
||
|
data: dict = request.form
|
||
|
creator_user: User = g.current_user
|
||
|
course_id: uuid.UUID = uuid.UUID(data.get('courseID'))
|
||
|
enrollment_data: Enrollment = db.session.execute(select(Enrollment).where(and_(Enrollment.courseID == course_id, Enrollment.userID == creator_user.id))).scalar()
|
||
|
if not enrollment_data:
|
||
|
return jsonify({'message': 'You are not enrolled in this class'}), 401
|
||
|
|
||
|
get_quiz_data :str = '{"questions":[{"question":"What is the capital of France?","options":["Paris","London","Berlin","Madrid"],"answer":"Paris"},{"question":"What is 2 + 2?","options":["3","4","5","6"],"answer":"4"}]}'
|
||
|
new_quiz = Quiz(
|
||
|
creatorUserID = creator_user.id,
|
||
|
courseID = course_id,
|
||
|
quizJson = get_quiz_data,
|
||
|
quiz_attempts = []
|
||
|
)
|
||
|
db.session.add_all(new_quiz)
|
||
|
db.session.commit()
|
||
|
return jsonify({'message': 'Course was created successfully.'}), 200
|
||
|
|
||
|
@quiz.route('/attempt', methods=['POST'])
|
||
|
def attempt_quiz():
|
||
|
data: dict = request.form
|
||
|
attempt_user: User = g.current_user
|
||
|
quiz_id: uuid.UUID = uuid.UUID(data.get('quizID'))
|
||
|
course_data: Enrollment = db.session.execute(select(Enrollment).where(and_(Enrollment.courseID == course_data, Enrollment.userID == attempt_user.id))).scalar()
|
||
|
if not course_data:
|
||
|
return jsonify({'message': 'You are not enrolled in this class'}), 401
|
||
|
|
||
|
answerKey: str = '{"questions":[{"question":"What is the capital of France?","options":["Paris","London","Berlin","Madrid"],"answer":"Paris"},{"question":"What is 2 + 2?","options":["3","4","5","6"],"answer":"4"}]}'
|
||
|
#function to calculate Score
|
||
|
score_value = 0
|
||
|
|
||
|
new_attempt = QuizAttempt(
|
||
|
userID = attempt_user,
|
||
|
quizID = quiz_id,
|
||
|
answerKey = answerKey,
|
||
|
score = score_value
|
||
|
)
|
||
|
db.session.add_all(new_attempt)
|
||
|
db.session.commit()
|
||
|
return jsonify({'message': 'Quiz was appended sucessfully'}), 200
|