Files
problem-bank/backend/routers/practice.py
2026-03-05 11:50:15 +08:00

58 lines
1.9 KiB
Python

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,
}