Coverage for app/routes/quiz.py: 26%
35 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
1from flask import request, render_template, Blueprint, redirect, session
2from app.models.response import *
3from app.models.status_codes import StatusCodes
4from flasgger import swag_from
5from app.services.quiz_service import build_prompt_from_suggestions, generate_quiz_from_prompt
6from app.controllers.database import client
8quiz_bp = Blueprint('quiz', __name__)
10@quiz_bp.route('/quiz/generate', methods=['POST'])
11def generate_quiz_route():
12 try:
13 data = request.get_json()
14 user_id = data.get("user_id")
15 user_class_id = data.get("user_class_id")
17 print(f"Received request to generate quiz for user_id: {user_id} & user_class_id: {user_class_id}")
19 if not user_id:
20 return error_response(
21 "Missing 'user_id' in request body.",
22 None,
23 StatusCodes.BAD_REQUEST
24 )
26 section_query = client.table("user_sections") \
27 .select("*") \
28 .eq("user_id", user_id) \
29 .eq("status", "NEED_REVIEW")
31 if user_class_id == "non-class":
32 section_query = section_query.is_("class_id", None)
33 else:
34 section_query = section_query.eq("class_id", user_class_id)
36 section = section_query.limit(1).execute()
38 if not section.data:
39 return success_response(
40 f"You have no sections that need review.",
41 {"quiz": []},
42 StatusCodes.NOT_FOUND
43 )
45 user_section_id = section.data[0]["section_id"]
47 existing_questions = client.table("user_section_questions") \
48 .select("*") \
49 .eq("user_section_id", user_section_id) \
50 .execute()
52 if existing_questions.data:
53 return success_response(
54 f"Returning existing quiz for user {user_id}",
55 {"quiz": existing_questions.data},
56 StatusCodes.OK
57 )
59 prompt = build_prompt_from_suggestions(user_section_id)
60 generated_quiz = generate_quiz_from_prompt(prompt)
62 for quiz in generated_quiz:
63 client.table("user_section_questions").insert({
64 "user_section_id": user_section_id,
65 "question": quiz["question"],
66 "choices": quiz["choices"],
67 "answer_index": quiz["answer_index"],
68 "explanation": quiz["explanation"],
69 "user_answer_index": None
70 }).execute()
72 saved_questions = client.table("user_section_questions") \
73 .select("*") \
74 .eq("user_section_id", user_section_id) \
75 .execute()
77 return success_response(
78 f"Quiz successfully generated for user {user_id}",
79 {"quiz": saved_questions.data},
80 StatusCodes.CREATED
81 )
83 except Exception as e:
84 return error_response(
85 f"Error generating quiz: {str(e)}",
86 None,
87 StatusCodes.SERVER_ERROR
88 )