first commit
This commit is contained in:
57
backend/routers/practice.py
Normal file
57
backend/routers/practice.py
Normal file
@@ -0,0 +1,57 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user