import random from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from backend.auth import get_current_user from backend.database import get_db from backend.models import Question from backend.schemas import PracticeCheckRequest, PracticeStartRequest router = APIRouter(dependencies=[Depends(get_current_user)]) @router.post("/start") def start_practice(payload: PracticeStartRequest, db: Session = Depends(get_db)) -> dict: query = db.query(Question) if payload.chapter: query = query.filter(Question.chapter == payload.chapter) if payload.secondary_knowledge: query = query.filter(Question.secondary_knowledge == payload.secondary_knowledge) if payload.question_type: query = query.filter(Question.question_type == payload.question_type) if payload.difficulty: query = query.filter(Question.difficulty == payload.difficulty) items = query.all() if payload.random_mode: random.shuffle(items) items = items[: payload.limit] return { "total": len(items), "items": [ { "id": i.id, "stem": i.stem, "option_a": i.option_a, "option_b": i.option_b, "option_c": i.option_c, "option_d": i.option_d, "question_type": i.question_type, } for i in items ], } @router.post("/check") def check_answer(payload: PracticeCheckRequest, db: Session = Depends(get_db)) -> dict: item = db.get(Question, payload.question_id) if not item: return {"correct": False, "message": "题目不存在"} user_answer = payload.user_answer.strip().upper() right_answer = item.answer.strip().upper() return { "correct": user_answer == right_answer, "right_answer": right_answer, "explanation": item.explanation, }