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